Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用UDP处理多个客户端_Java_Udp - Fatal编程技术网

Java 使用UDP处理多个客户端

Java 使用UDP处理多个客户端,java,udp,Java,Udp,设想一个UDP服务器: while (true) { try { socket.receive(packet); // handle packet (potentially CPU-intensive) } catch (IOException e) { e.printStackTrace(); } } 困扰我的是,我只有一个线程来处理来自所有客户端的所有数据包。我假设我的服务器不能在同一个套接字上启动多个线程来接收数据包

设想一个UDP服务器:

while (true) {
    try {
        socket.receive(packet);
        // handle packet (potentially CPU-intensive)
    } catch (IOException e) {
        e.printStackTrace();
    }
}
困扰我的是,我只有一个线程来处理来自所有客户端的所有数据包。我假设我的服务器不能在同一个套接字上启动多个线程来接收数据包?当然,我可以在单独的线程中处理数据包,但我仍然只有一个线程来接收数据包,而且无论将数据包转发到另一个线程所需的时间有多短,服务器仍然不会听到传入的数据包

因此,我的问题是:如果服务器当前未在
server.receive()
中被阻止,发送到服务器的数据包是否会丢失,或者它们是否会在下次调用该方法时排队?如果他们迷路了,我如何处理多个客户端

如果服务器当前未在server.receive()中被阻止,发送到服务器的数据包是否丢失

没有

或者他们会在下次调用该方法时排队吗

如果有空间,它们将在套接字接收缓冲区中排队,否则它们将丢失

如何处理多个客户端

要么以足够快的速度处理每个数据包,使套接字接收缓冲区永不溢出,要么启动一个新线程来处理每个数据报