TCP协议实现简单的通信
## TCP协议:
是一种面向连接的保证可靠的传输协议,通过TCP协议传输,得到的是一个顺序的无差错的数据流。 发送方和接收方的成对的建立连接。必须通了之后才能传输数据。可以双向传输数据
*端口:
** 我们这里所说的端口,不是计算机硬件的I/O端口,而是软件形式上的概念。 根据提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。 计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达, 也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达, 这种方式大多采用UDP协议。对应这两种协议的服务提供的端口,也就分为TCP端口和UDP端口。
*第一步:**创建客户端方:Client.java
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; /** * TCP 通信 客户端发送消息 * */ public class Client { public static void main(String[] args) throws IOException { Cilent demo = new Cilent(); demo.test(); } private void test() throws IOException { // 获取本机地址,用作发消息的对象。 InetAddress address = InetAddress.getLocalHost(); String ip = address.getHostAddress(); //自定义端口,用于发送消息 int port = 10086; Socket socket = new Socket(ip, port); OutputStream outputStream = socket.getOutputStream(); String s = "A:小梅,你最近还好吗?"; outputStream.write(s.getBytes()); System.out.println("-------------------"); InputStream inputStream = socket.getInputStream(); //创建输出流,将服务器传送回来的消息保存到硬盘 FileOutputStream fileOutputStream = new FileOutputStream("D:" + File.separator + "tcp.txt", true); byte[] b = new byte[1024 * 1]; int len = inputStream.read(b); fileOutputStream.write(b, 0, len); fileOutputStream.flush(); String message = new String(b, 0, len); System.out.println("收到回信:" + message); inputStream.close(); fileOutputStream.close(); outputStream.close(); socket.close(); } }
*第二步:**创建服务器方:Server.java
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** * TCP 通信 服务器端,接收消息 * */ public class Server { public static void main(String[] args) throws IOException { Server demo=new Server(); demo.test(); } private void test() throws IOException { int port = 10086; ServerSocket serverSocket = new ServerSocket(port); Socket accept = serverSocket.accept(); InputStream inputStream = accept.getInputStream(); //创建输出流,将收到的信息保存到硬盘中 FileOutputStream fileOutputStream = new FileOutputStream("D:" + File.separator + "tcp.txt",true); byte[] b = new byte[1024 * 1]; int len = 0; len = inputStream.read(b); fileOutputStream.write(b, 0, len); fileOutputStream.flush(); String s = new String(b, 0, len); System.out.println("收到消息:" +s); String ip = accept.getInetAddress().getHostAddress(); System.out.println("消息来自:" + ip); OutputStream outputStream = accept.getOutputStream(); outputStream.write("B:我很好,你呢?".getBytes()); outputStream.close(); inputStream.close(); serverSocket.close(); fileOutputStream.close(); } }
运行结果:
在服务器端,接收到客户端发送过来的信息。
在客户端收到服务器发送回来消息
将消息读写到硬盘中
注意:TCP也是先运行服务器端 Server,再运行客户端 Client.防止消息传送过来时,没有对象接收。
来源:51CTO
作者:行走的陈序
链接:https://blog.csdn.net/weixin_44129913/article/details/100165569