我对Socket编程有很基本的疑问(也与网络有关)。 我有类似的服务器..
ServerSocket ss = new ServerSocket(1234);
我有一个名为incomingLink的Socket来处理传入的请求..
Socket incomingLink = ss.accept();
请注意,有超过1个客户端(比如说3个客户端)有他们的outgoingLink Socket类似的东西..
Socket outgoingLink = new Socket(ServerIp, 1234);
嗯,要求是服务器有一些本地参数(比方说)
String state;
int timeStamp;
应在第一次客户请求到达时更新。随后的请求将被丢弃。这意味着如果首先收到客户端1的请求,那么客户端2和3的请求将被丢弃。
现在我的问题是,如果所有三个客户端都在同一时间发送请求,那么我的ServerSocket将如何处理这些请求? 我是否需要创建一个socket数组来独立处理这三个请求?
Socket[] incomingLink = new Socket[3];
incomingLink[0] = ss.accept();
incomingLink[1] = ss.accept();
incomingLink[2] = ss.accept();
否则,如果我使用单个incomingLink套接字,底层传输协议(TCP / UDP)是否可以帮我处理这些同步请求,方法是将它们缓冲到缓冲区,并保持正确的顺序,然后再提供一个另一个到我的ServerSocket,以便我的单个incomingLink Socket将正确处理它们? (假设即使这些请求同时发送,这三个请求的传播延迟也会有变化)。
请帮忙。感谢。
答案 0 :(得分:2)
通常你创建在循环中监听的客户端套接字,如下所示:
while(shouldAcceptConnections){
Socket client = ss.accept();
// usually here you would fire a thread to handle your client
}
换句话说,如果ss.accept()不在循环中而只是一次然后终止只有第一个客户端将设法连接(其他将被拒绝 - 被动拒绝,因为不会接受。)。您当然也可以在循环中执行此操作并主动拒绝它们。
答案 1 :(得分:0)
这是 非常 奇怪的要求。你确定你已经正确理解了吗?
如果所有三个客户都在同一时间发送他们的请求
在网络中没有“完全相同的时间”。 (a)这是不可发现的,(b)网络是连续的中介。因此,连接请求将按顺序到达,而不是同时到达。具体而言,accept()
将一次返回一个Socket
,无论您的本地TCP堆栈决定的顺序是什么。
我是否需要创建一个socket数组来独立处理这三个请求
我不明白为什么。您只需创建Socket
变量来存储每个accept()
的结果,并在单独的线程中处理每个Socket
。
如果我使用单个incomingLink套接字
你做不到。这个建议没有意义。每个接受的Socket
都是一个单独的对象。
底层传输协议(TCP / UDP)是否可以帮我处理这些同步请求,方法是将它们缓冲到缓冲区,并保持正确的顺序,然后将它们一个接一个地提供给我的ServerSocket
是的,见上文。
这样我的单个incomingLink Socket会正确处理它们吗?
我不知道这意味着什么。