TCP协议实现简单的通信

匿名 (未验证) 提交于 2019-12-02 23:56:01

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.防止消息传送过来时,没有对象接收。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!