检查谁发送了UDP数据包?

时间:2014-05-07 02:22:42

标签: c# udp port packet

我正在制作一个使用UDP发送/接收数据包的简单游戏。我将发送诸如" loc 321,108"将玩家移动到321,108,但我找不到一个好方法来检查哪个用户移动/更新位置,因为发送" loc myusername 321,108"会大大增加带宽使用量。

有人能指出我正确的方向吗?

感谢。

3 个答案:

答案 0 :(得分:0)

一个建议是使用发件人的IP地址(假设每台PC有一个播放器)。详情如下:

C# Getting sender address from UDP message

基本上你只需使用以下内容:

EndPoint remote_ep = new IPEndPoint(IPAddress.Any, 0);
sendSocket.ReceiveFrom(data, ref remote_ep);   //remote_ep now contains the originators IP

答案 1 :(得分:0)

使用recvfrom获取数据的来源地址。这是一个很好的参考例子:

http://www.beej.us/guide/bgnet/output/html/multipage/recvman.html

从那里,服务器需要一个用户列表和链接到该用户的地址。也是一种处理地址数据的方法,没有用户绑定它们。就像那些尚未登录游戏的人一样。

答案 2 :(得分:0)

在您的数据包中添加一个短字符串并不是什么大问题,除非您以非常高速率发送它们。而对于一个简单的游戏,如果你发送那么多数据包,你可能正在做错。您唯一需要关注的是超出网络的MTU,您可能不会这样做,因为这些天大多数网络大约需要1500字节。

如果您确实认为您无法为对等名称支付几个字节,则可以尝试使用远程套接字地址(IP地址和UDP端口)。不要只使用远程IP地址,因为它可能不是唯一的。我不确定如何在C#中获得它。