Java基础-TCP通信(多发多收和一发一收)
目录
案例要求:
实现思路:
代码:
User:客户端
Client:服务端
总结:
案例要求:
实现TCP通信的多发多收和一发一收,多发多收去掉各自的while循环就是一发一收,本文只模拟一发一收
实现思路:
客户端(User)通过Socket连接服务端(Client)的8888端口,用户输入消息后通过DataOutputStream发送,输入"exit"退出。服务端通过ServerSocket监听端口,接收消息后显示内容和客户端IP及端口信息。该实现移除了多发多收中的循环结构,简化为一对一通信模式,可作为TCP通信的基础框架。
代码:
User:客户端
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.*;
import java.util.Scanner;public class User {public static void main(String[] args) throws Exception {Socket socket = new Socket("127.0.0.1", 8888);OutputStream out = socket.getOutputStream();DataOutputStream dos = new DataOutputStream(out);Scanner sc = new Scanner(System.in);while (true) {String msg= sc.nextLine();if(msg.equals("exit")){dos.close();socket.close();break;}dos.writeUTF(msg);}}
}
Client:服务端
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;public class Client {public static void main(String[] args) throws Exception{ServerSocket serverSocket = new ServerSocket(8888);Socket socket = serverSocket.accept();InputStream in = socket.getInputStream() ;DataInputStream dis = new DataInputStream(in);while (true) {String msg=dis.readUTF();System.out.println("收到用户端的消息:"+msg);String ip=socket.getInetAddress().getHostAddress();String port=socket.getPort()+"";System.out.println("ip:"+ip+" port:"+port);}}
}
总结:
本文实现了一发一收的TCP通信模型。客户端(User)通过Socket连接服务端(Client)的8888端口,用户输入消息后通过DataOutputStream发送,输入"exit"退出。服务端通过ServerSocket监听端口,接收消息后显示内容和客户端IP及端口信息。该实现移除了多发多收中的循环结构,简化为一对一通信模式,可作为TCP通信的基础框架。