我对套接字编程有非常基本的怀疑(也与网络有关)。 我有 ServerSocket 之类的东西..
ServerSocket ss = new ServerSocket(1234);
我有一个名为 incomingLink 的 Socket 来处理传入的请求..
Socket incomingLink = ss.accept();
请注意,有超过 1 个客户端(比如 3 个客户端)的 outgoingLink 套接字类似于..
Socket outgoingLink = new Socket(ServerIp, 1234);
嗯,要求是服务器有一些本地参数(比如)
String state;
int timeStamp;
每当第一个客户端请求到达时,它应该被更新。并丢弃后续请求。这意味着如果首先收到客户端 1 的请求,则客户端 2 和 3 的请求将被丢弃。
现在我的问题是,如果所有三个客户端同时发送请求,那么我的 ServerSocket 将如何处理这些请求? 我是否需要创建一个套接字数组来像这样独立处理这三个请求?
Socket[] incomingLink = new Socket[3];
incomingLink[0] = ss.accept();
incomingLink[1] = ss.accept();
incomingLink[2] = ss.accept();
否则,如果我使用单个 incomingLink 套接字,底层传输协议(protocol) (TCP/UDP) 是否会为我处理这些同时发生的请求,方法是将它们缓冲到缓冲,并保持适当的顺序,然后在之后提供它们另一个到我的 ServerSocket,以便我的单个 incomingLink 套接字能够正确处理它们? (假设这三个请求的传播延迟可能存在变化,即使它们同时发送)。
请帮忙。谢谢。
最佳答案
通常你创建客户端套接字在循环中监听,像这样:
while(shouldAcceptConnections){
Socket client = ss.accept();
// usually here you would fire a thread to handle your client
}
换句话说,如果你不在循环中执行 ss.accept() 而只执行一次,然后终止,只有第一个客户端将设法连接(其他客户端将被拒绝 - 被动地因为没有接受。)。您当然也可以在循环中执行此操作并主动拒绝它们。
关于java - Socket 如何同时处理多个客户端请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19807890/