如何接收UDP并发请求?

时间:2012-09-28 17:07:45

标签: c# java c sockets udp

我正在构建一个UDP服务器,它可以单独处理每个传入的请求 线。问题是,UDP客户端可能会发出多个请求 同时使用多个线程。客户端上的每个线程都将等待 来自服务器的响应。由于UDP是无连接的,因此是客户端线程 可能会收到不匹配的数据报。在这种情况下,确实有 内置机制或模式,帮助客户端线程获得匹配的响应? (例如,将每个请求从服务器发送到特定的udp端口!!?) 我不想使用队列因为它同时丢失了属性。 如果没有,我想我们可以构建一个调度响应的队列 适当的客户线程。但是,如果我需要运行多个客户端,该怎么办? 在同一客户端计算机上的不同JVM中,每个客户端都会生成 请求到同一台服务器?

2 个答案:

答案 0 :(得分:2)

为每个udp客户端使用单独的套接字。这样你就有了一个不同的ip和端口用于发送,并且会收到相同的响应,即发送请求的客户端只会收到它的响应(我认为这是你的匹配意思)这应该自动完成,除非你分享线程之间的相同套接字并使用它向服务器发送消息,这似乎是一个坏主意。

在向服务器发送消息之前,您可以在客户端中设置源(发送方端口)中的任何端口。服务器可以提取源端口并响应相同的端口

e.g。

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.

答案 1 :(得分:1)

如果您想要进行并发连接,请进行多个连接。在客户端上生成新的UDP连接,服务器将在其末端打开一个新连接。在客户端上的connection1上发送的任何内容都会在服务器上的connection1上发生,在连接2上发送的任何内容都会在连接2上收到。