我正在制作一个使用UDP发送/接收数据包的简单游戏。我将发送诸如" loc 321,108"将玩家移动到321,108,但我找不到一个好方法来检查哪个用户移动/更新位置,因为发送" loc myusername 321,108"会大大增加带宽使用量。
有人能指出我正确的方向吗?
感谢。
答案 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#中获得它。