目錄
案例要求:
實現思路:
代碼:
User類:用戶端
Client類:服務端
ServerReader類:多線程通信類
總結:
案例要求:
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);System.out.println("客戶端啟動");OutputStream out = socket.getOutputStream();DataOutputStream dos = new DataOutputStream(out);Scanner sc = new Scanner(System.in);while (true) {System.out.println("請說:");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{System.out.println("服務端啟動了...");ServerSocket serverSocket = new ServerSocket(8888);Socket socket = null;while (true) {socket = serverSocket.accept();System.out.println("一個客戶端上線了:"+socket.getInetAddress().getHostAddress());new ServerReader(socket).start();}}
}
ServerReader類:多線程通信類
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;public class ServerReader extends Thread{private Socket socket;public ServerReader(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {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);}} catch (Exception e) {System.out.println("一個客戶端下線了:"+socket.getInetAddress().getHostAddress());}}
}
總結:
摘要:本文介紹了使用多線程解決TCP單通信問題的方案。通過創建User類作為客戶端,Client類作為服務端主程序,以及ServerReader類作為多線程處理類,實現了服務端同時處理多個客戶端連接。當新客戶端連接時,服務端會為每個連接創建獨立線程來處理通信,從而突破單客戶端限制。該方案有效解決了傳統TCP通信中服務端只能處理單個連接的問題,實現了多客戶端并發通信的功能。