Java基础-TCP通信单服务器接受多客户端

发布于:2025-08-10 ⋅ 阅读:(10) ⋅ 点赞:(0)

目录

案例要求:

实现思路:

代码:

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;
    }
    @Override
    public 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通信中服务端只能处理单个连接的问题,实现了多客户端并发通信的功能。


网站公告

今日签到

点亮在社区的每一天
去签到