java - Socket 如何同时处理多个客户端请求?

标签 java sockets tcp

我对套接字编程有非常基本的怀疑(也与网络有关)。 我有 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/

相关文章:

java - Android 没有得到正确的 boolean 值

java - 命名返回流的 java 方法

java - 如何调整我的 DOMParser 以从 Java (Android) 上的 RSS 解析 "media:content"?

c - I/O、写入本地驱动器上的文件或写入套接字,哪个更快?

Java TCP Echo 服务器 - 广播

delphi - 任何人都可以帮助我解释我在尝试使用 dll 打开端口时遇到的这个错误

tcp - 我可以为 TCP 使用广播或多播吗?

java - java中如何使用正则表达式捕获字符串中的内容

java - 以通用功能接口(interface)作为参数的模拟方法 - Mockito

.NET Socket.Connect 将主机名解析为 IP 地址