目錄
案例要求:
實現思路:
代碼:
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通信的基礎框架。