C# UDP编程 udpClient.Receive(ref remoteIpEndPoint)不能接收数据

风一样De少年 2017-02-19 10:03:46
我在学习UDP编程的时候遇到个奇葩问题,代码中使用udpClient.Receive(ref remoteIpEndPoint)接收数据,运行状态下不能接收数据,但是在调试状态下就能接收到数据,请问哪位朋友知道是什么问题呢?已经被这个问题困扰几天了,真心求助~
以下是主要代码:
 class Program
{
static void Main(string[] args)
{
UdpManager udpManager = new UdpManager();
udpManager.receiveMsg();
}
}
UdpManager类:
private UdpClient udpClient;
private IPAddress remoteIpAddress;
private string remoteIp;
private int localPort;
public UdpManager() : this(Config.REMOTE_IP, Config.LOCAL_PORT) { }
public UdpManager(string remoteIp, int localPort)
{
this.localPort = localPort;
this.remoteIp = remoteIp;
remoteIpAddress = IPAddress.Parse(remoteIp);
IPEndPoint localIpEndPoint = new IPEndPoint(IPAddress.Parse(Config.LOCAT_IP), localPort);
udpClient = new UdpClient(localIpEndPoint);
}
public void receiveMsg()
{
Console.WriteLine("1...");
IPEndPoint remoteIpEndPoint = new IPEndPoint(remoteIpAddress, 0);
while (true)
{
Console.WriteLine("2...");
try
{
byte[] receiveBytes = udpClient.Receive(ref remoteIpEndPoint);
interpretingData(receiveBytes);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("3...");
}
}
...全文
1224 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alvin.Liang 2019-03-07
  • 打赏
  • 举报
回复
@风一样De少年,请问如何解决呢? 我也是遇到“调试的时候可以收到数据,运行的时候就收不到”。Wireshark显示电脑能收到正确的udp包,但是运行的时候程序一点反应都没有……
风一样De少年 2017-02-19
  • 打赏
  • 举报
回复
引用 5 楼 xuggzu 的回复:
很有可能是接收数据太快,造成输出界面假死。建议用线程接收数据,输出使用委托方式。
感谢您的回复,我之前也开过线程运行,然后将数据写入文件中,不过也是一样的情况,文件中也没有数据,然后调试的时候就没问题
风一样De少年 2017-02-19
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
正常情况下,要避免死循环。 你的代码只是刚学、用来demo语法,那么如果要死循环,就要放到子线程中去。主程序应该pending等待用户录入,不要卡死。
感谢您的回复,我之前也用过异步的方法,也开过线程单独运行,不过最后还是一样的情况。。。
风一样De少年 2017-02-19
  • 打赏
  • 举报
回复
引用 3 楼 Yokeqi 的回复:
看代码我能想到的是服务端跟客户端启动顺序的问题。就是服务端发消息过来的时候你客户端还没有开始ReceiveMessage。你可以往这个方向去尝试下看,写点日志什么的。Debug.Writeline写日志到输出窗口
感谢您的回答,顺序没有问题,服务器端一直在发送数据,而且我调试的时候是能获取数据的
xuggzu 2017-02-19
  • 打赏
  • 举报
回复
很有可能是接收数据太快,造成输出界面假死。建议用线程接收数据,输出使用委托方式。
  • 打赏
  • 举报
回复
正常情况下,要避免死循环。 你的代码只是刚学、用来demo语法,那么如果要死循环,就要放到子线程中去。主程序应该pending等待用户录入,不要卡死。
枫0子K 2017-02-19
  • 打赏
  • 举报
回复
看代码我能想到的是服务端跟客户端启动顺序的问题。就是服务端发消息过来的时候你客户端还没有开始ReceiveMessage。你可以往这个方向去尝试下看,写点日志什么的。Debug.Writeline写日志到输出窗口
风一样De少年 2017-02-19
  • 打赏
  • 举报
回复
求助。。。。
风一样De少年 2017-02-19
  • 打赏
  • 举报
回复
大神们,help!!!!!
风一样De少年 2017-02-19
  • 打赏
  • 举报
回复
问题已经解决了,谢谢大家!
风一样De少年 2017-02-19
  • 打赏
  • 举报
回复
引用 9 楼 shingoscar 的回复:
很常见的丢包了吧
不是这个原因,谢谢您的回复
Poopaye 2017-02-19
  • 打赏
  • 举报
回复
很常见的丢包了吧

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧