• 全部
...

c# udp通讯收不到别人发来的数据了

Johnson2580 2020-04-15 10:38:32
之前调试过是能收到的,后来什么也没改,IP地址和端口号也对,就是收不到了。

现在测试情况如下:
1,别人发的数据在自己电脑上用udp调试助手能收到,但是自己写的udp收不到
2,自己udp发的数据别人能收到
3,在自己电脑上用udp调试助手给自己发数据,自己写的udp能收到
4,自己写的udp放在别的解决方案能收到,但是放到目前的解决方案就收不到

请大神帮忙看看什么原因,在receive那里直接就收不到数据,同样的ip和端口号用网上下载的调试助手就能收到,代码如下:

string localIP = "";//本机IP
IPAddress[] IP = Dns.GetHostAddresses(Dns.GetHostName());//获取本地IP地址列表
for (int i = 0; i < IP.Length; i++)
{
localIP = IP[i].ToString();
}

#region UDP接收线程开启
LocalRevEndPoint = new IPEndPoint(IPAddress.Parse(localIP), Myapp_Config.PortRev_l);//本地接收终结点
ReceiveThread = new Thread(new ThreadStart(UDPReceive));//UDP接收线程
ReceiveThread.IsBackground = true;
ReceiveThread.Name = "UDP接收线程";
ReceiveThread.Start();
#endregion

/// <summary>
/// 接收数据
/// </summary>
private void UDPReceive()
{
IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);//任意ip的远程终结点
ReceiveUdpClient = new UdpClient(LocalRevEndPoint);
while (true)
{
try
{
byte[] receiveBytes = ReceiveUdpClient.Receive(ref remoteIpEndPoint);//接收数据
Console.WriteLine("收到数据");
if (receiveBytes[0] == 0xFF && receiveBytes[1] == 0xEE)
{
RevDateTime = DateTime.Now;//获取接收数据的时间
string RemoteIP = remoteIpEndPoint.Address.ToString();
if (receiveBytes.Length > 0 && RemoteIP != "")
{
MenuForm.MyTransSystemState.SystemState(receiveBytes, RemoteIP);//处理系统状态数据
}
}


}
catch (Exception ex)
{
//m_SysException.SystemException(ex, "", "UdpServer.Listen");
Console.WriteLine("----------------------------------------------------------------");
Console.WriteLine(ex.ToString());
}
Thread.Sleep(500);
}
}
...全文
给本帖投票
3615 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
王五9200 2022-03-02
  • 打赏
  • 举报
回复 2

我开始也遇到和楼主一样的问题,在接收那边打断点进不去。然后把防火墙关掉就解决了

weixin_39928598 2021-12-06
  • 打赏
  • 举报
回复

我今天晚上测试,网络调试助手能收到数据,我的程序死活收不到,然后我把网络调试助手关了,我的程序瞬间收到了,不能说一模一样,只能说毫不相关

牧歌ing 2020-06-29
  • 打赏
  • 举报
回复
出入站规则修改一下
Johnson2580 2020-06-28
  • 打赏
  • 举报
回复 1
问题已解决,是防火墙不小心打开了,真是日了狗了
Johnson2580 2020-04-15
  • 打赏
  • 举报
回复
引用 5 楼 大西瓜一块五一斤♏ 的回复:
一条都收不到吗?写的while(true) Thread.Sleep就是坑,别人可能一直在发,你延迟了这部分就可能收不到了,建议改成UdpClient.BeginReceive
一条都收不到,把Thread.Sleep删掉也收不到,断点进不去
  • 打赏
  • 举报
回复
一条都收不到吗?写的while(true) Thread.Sleep就是坑,别人可能一直在发,你延迟了这部分就可能收不到了,建议改成UdpClient.BeginReceive
Johnson2580 2020-04-15
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:

ReceiveUdpClient
这是啥把。另外最上面那串循环ip也不知道是啥

这么说吧,只需要开端口监听就好。所以请开启一个固定端口的ip.any 就可以了,至于你的Receive,红字部分不知道你写的是上面,所以暂无答案
ReceiveUdpClient就是实例化了一个UdpClient全局变量,端口号和ip都没错
private UdpClient ReceiveUdpClient; //接收用UDP
Johnson2580 2020-04-15
  • 打赏
  • 举报
回复
引用 2 楼 wanghui0380 的回复:
哦等等,控制台,线程

我估计不是没收到,我估计是没输出
好像就是没收到,把断点打在 ReceiveUdpClient.Receive那里然后就不往下走了
wanghui0380 2020-04-15
  • 打赏
  • 举报
回复
哦等等,控制台,线程 我估计不是没收到,我估计是没输出
wanghui0380 2020-04-15
  • 打赏
  • 举报
回复
ReceiveUdpClient 这是啥把。另外最上面那串循环ip也不知道是啥 这么说吧,只需要开端口监听就好。所以请开启一个固定端口的ip.any 就可以了,至于你的Receive,红字部分不知道你写的是上面,所以暂无答案

111,087

社区成员

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

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

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

手机看
关注公众号

关注公众号

客服 返回
顶部