为了账号安全,请及时绑定邮箱和手机立即绑定

C#Udp BeginReceive-消息混乱

C#Udp BeginReceive-消息混乱

C#
冉冉说 2021-05-14 18:19:07
我目前正在尝试创建UDP客户端/服务器。这很简单,有一个发送函数,它发送一个字节,然后客户端立即响应一条消息,其中包含我正在侦听的信息我在接收数据时遇到了麻烦。我一直都在接收数据,并且收到的包裹确实有正确的长度,但是消息似乎混乱了。SendAndReceive函数在10秒计时器上。编辑:如果我每次调用SendAndReceive函数时都重新创建MyUdpClient,则它将正常工作,并且程序包的顺序不正确。这是我的代码:private void SendAndReceive(object sender = null, ElapsedEventArgs e = null){    ClientEndpoint = new IPEndPoint(IPAddress.Parse(IP), Port);    // Works if i recreate MyUdpClient...    MyUdpClient = new UdpClient();    MyUdpClient.ExclusiveAddressUse = false;                                                                      MyUdpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);    MyUdpClient.Send(InfoPacket, InfoPacket.Length, ClientEndpoint);    try    {        MyUdpClient.BeginReceive(new AsyncCallback(ReceiveMessages), null);    }    catch (Exception exception)    {        Console.WriteLine($"Exception: {exception.ToString()}");    }}public void ReceiveMessages(IAsyncResult res){    IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, Port);    byte[] receivedPacket = MyUdpClient.EndReceive(res, ref RemoteIpEndPoint);    var ipAddress = RemoteIpEndPoint.Address.ToString();    MyUdpClient.BeginReceive(new AsyncCallback(ReceiveMessages), null);    // This is for debugging.    string receivedTime = DateTime.Now.ToString("HH:mm:ss");    Console.WriteLine($"[{receivedTime}]{ipAddress} {receivedPacket.Length} {Encoding.Default.GetString(receivedPacket)}");    // Process Data Further    ...}常见的输出通常是这样的:[18.29.30]172.20.55.32 475  a[18.29.30]172.20.55.10 455  b[18.29.30]172.20.55.101 440 c[18.29.30]172.20.55.17 452  d[18.29.30]172.20.55.31 414  e[18.29.30]172.20.55.20 449  f[18.29.30]172.20.55.8 456   g[18.29.30]172.20.55.28 381  h字母代表解码后的消息。第一次接收到这些消息时,它们是正确的,但是此后,消息就混乱了。有任何想法吗?我不确定该朝哪个方向走。是线程问题,还是我必须在以后解码接收到的包?
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

我将整个实现更改为.ReceiveTask而不是中使用.BeginReceive。我发现使用aTask会更好,因为我需要安全地停止并启动接收功能,并且它解决了我遇到的怪异问题。


查看完整回答
反对 回复 2021-05-23
  • 1 回答
  • 0 关注
  • 288 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信