java中的udp并发不能处理多个客户端

7nbnzgx9  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(508)

这是我的密码:

public class UDPServer implements Runnable{
    DatagramSocket socket;
    Logger logger;

    public UDPServer(DatagramSocket socket, Logger logger) {
        this.socket=socket;
        this.logger=logger;
    }

    public static void handleEchoClient(DatagramSocket socket, Logger logger) throws IOException {

        int totalBytesEchoed=0;
        DatagramPacket packet = new DatagramPacket(new byte[32], 32);
        socket.receive(packet);

        String s=new String(packet.getData()).trim();
        totalBytesEchoed=s.length();
        logger.info("Client " + socket.getRemoteSocketAddress() +", echoed " + totalBytesEchoed + " bytes.");
        socket.send(packet); 

    }

    public void run() {
        try {
            handleEchoClient(socket, logger);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
public static void main(String[] args) throws IOException{
    int servPort = 3444;

    DatagramSocket socket = new DatagramSocket(servPort);
    DatagramPacket packet = new DatagramPacket(new byte[32], 32);
    Executor servis = Executors.newCachedThreadPool();  
    Logger logger = Logger.getLogger("practical");

    servis.execute(new UDPServer(socket, logger));
    servis.execute(new UDPServer(socket, logger));

}
}

它只支持一个客户端,但不支持两个客户端。提前谢谢。
忽略这一点:看起来你的帖子大部分都是代码;请添加更多细节。看起来你的帖子大部分是代码;请补充一些细节。

drkbr07n

drkbr07n1#

您只有一个套接字,并且将每个回复发送到该套接字的远程地址。所以你的代码不可能把回复发送到两个不同的地方。
如果要处理多个客户端,则需要跟踪与之通信的各种远程地址,并向相应客户端的远程地址发送回复。

相关问题