我正在构建一个 UDP 服务器,它在单独的线程中处理每个传入请求。问题是,一个 UDP 客户端可能会使用多个线程同时发送多个请求。客户端上的每个线程都将等待来自服务器的响应。由于 UDP 是无连接的,因此客户端线程可能会收到不匹配的数据报。在这种情况下,是否有任何内置机制或模式可以帮助客户端线程获得匹配的响应?(例如,将每个请求从服务器发送到特定的 udp 端口!!?)我不想使用队列,因为它同时丢失了属性。如果没有,我想我们可以构建一个队列,将响应分派给适当的客户端线程。但是,如果我需要在同一台客户端机器上运行不同 JVM 中的多个客户端,并且每个客户端都会向同一台服务器发出请求,该怎么办?
问问题
2018 次
2 回答
2
为每个 udp 客户端使用单独的套接字。这样,您就有不同的 ip 和端口用于发送,并且将在相同的情况下接收响应,即发送请求的客户端只会收到它的响应(我认为这就是您的意思匹配)除非您共享,否则这应该自动完成线程之间的相同套接字并使用它向服务器发送消息,这似乎是个坏主意。
在将消息发送到服务器之前,您可以在客户端的源(发送方端口)中设置任何端口。服务器可以提取您的源端口并响应相同的端口
例如
Client 1 source port:10401 -> server:listening port:2000. Server responds to port 10401.
Client 2 source port:10402 -> server: listening port: 2000. Server responds to port 10402.
于 2012-09-28T17:18:47.110 回答
1
如果要进行并发连接,请进行多个连接。在客户端生成一个新的 UDP 连接,服务器将在它的末端打开一个新连接。在客户端上的 connection1 上发送的任何内容都会在服务器上的 connection1 上进行,在 connection2 上发送的任何内容都会在连接 2 上接收。
于 2012-09-28T17:41:36.367 回答