c# - 如何接收UDP并发请求?

标签 c# java c sockets udp

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

最佳答案

为每个 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.

关于c# - 如何接收UDP并发请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12644417/

相关文章:

c# - InvalidConstraintException 仅在设计器中?

c# - AJAX 回调到 ASP.NET Core Razor 页面的示例

java - 在 Java 中查找带注释的包?

c - fwrite() 性能下降

Linux 操作系统类的内容

c# - 在 C# 和 DateTime 中嵌入 IronRuby

java - Tomcat 8.5.45 启动后抛出大量 NullPointerException-s 但继续工作

java - WebSphere 尝试从 Internet 加载与 Spring 相关的模式

C-AVR-简单PORTB、DDRB、PINB解释

c# - 在 C# 中,如何检查路径是否为虚拟路径?