C#:Udp套接字和receivefrom()方法

时间:2018-10-07 20:22:56

标签: c# udp

我想让多个类似服务器的应用程序从同一UDP端口接收数据。每个应用程序将具有两个IP地址和端口,分别与两个与之通信的客户端相对应。

问题:UDP端口如何处理数据?如果每个应用程序都有两个<html> <head> <!--Titel/Icon/CSS files--> </head> <header> <!--Banner/2 small images--> </header> <body class="GW-CT-AUG"> <ul id="navigatie_menu"> <!--Other pages (history-about us-home(index.html) --> <li><a>Game Modes</a> <ul> <!--The different gamemodes--> </ul> </li> <li><a>Maps</a> <ul> <!--The different maps--> </ul> </li> <li><a>Wapens</a> <ul> <!--The different guns--> </ul> </li> <li><a>Equipment</a> <ul> <!--The different Equipment--> </ul> </li> </ul> <center> <!--An images--> <p class="tekst"> <!--Information about the game--> </p> </center> </body> <footer class="footer" id="footer-aug"> <!--footer--> </footer> </html> 方法来处理数据,它是否会通过从目标IP地址中挑选数据来像本例中那样工作?

Sketch of how I think it works

还是那些beginreceivefrom()方法必须等待接收到的最旧的数据被处理? 是否可以检查是否有等待从某个IP读取的数据?例如:receivefrom()

编辑:我进行了搜索,发现如果我使用socketoption REUSEADDR,我可以将多个应用程序与一个套接字绑定到相同的ip和端口,问题: 我必须处理该端口收到的每条消息吗?还是我可以使用beginreceivefrom并且它将过滤来自其他IP的消息?如果发生这种情况,将从接收到的最早消息(可能尚未处理)中开始接收消息,然后阻止该应用程序,直到出现来自可接受IP的消息为止?

1 个答案:

答案 0 :(得分:0)

如果要通过多个特定IP接收数据,则应为每个IP创建一个套接字。这样,您可以轻松区分IP。您可以绑定到多个IP地址上的同一端口。客户端会将其数据包发送到IP和端口的特定组合。服务器操作系统将以此方式决定将数据转发到哪个套接字。

一种完全不同的设计是仅使用一个IP和端口,但让客户端说出它想与分组数据内部的哪个应用程序进行通信。您可以在数据前添加一个字节,以告知请求的类型(例如0 = request type A, 1 = request type B)。这样,您需要处理较少的网络配置。