【发布时间】:2022-01-25 07:05:03
【问题描述】:
我的硬件以大约 5 秒的间隔向地址 192.168.0.255 发送信息(在下图中,Wireshark 软件显示 IP 地址为 192.168.0.241 的设备发送消息“你好”到端口 7000 上的地址 192.168.0.255):
另一方面,我有一个用 C# 制作的桌面应用程序,它尝试按如下方式读取该信息:
int PORT = 7000;
udpClient = new UdpClient();
udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, PORT));
private async Task<string> getData()
{
try
{
var from = new IPEndPoint(0, 0);
while (true)
{
var recvBuffer = udpClient.Receive(ref from);
string result= Encoding.UTF8.GetString(recvBuffer);
if (result != null && resultado.Length > 0)
{
return result;
}
}
}
...
}
它不起作用(udpClient.Receive 永远不会返回信息,这类似于还没有套接字信息),但是如果我从我的 PC 上打开一个允许我将信息写入 UDP scoket 的软件工具,该代码运行良好(udpClient.Receive 捕获发送的信息。)
有什么建议吗?
【问题讨论】:
-
具体是什么意思不起作用?它会引发异常还是卡在
Receive调用上?您是否尝试过调试它?我们在这里需要更多信息;-) -
我的意思是断点永远不会到达,如第二张图片所示,因为它类似于在提到的套接字中找不到信息。
-
您是否尝试过验证(例如通过使用 WireShark)是否有任何数据从您的设备发送到电脑?
-
抱歉,有一些问题,没有看到图片。好的,如果您使用的是桌面应用程序,它是从本地机器发送的,还是您也尝试过另一台机器?可能是您有一些防火墙问题阻止了 udp 流量。由于 localhost 通常不会被阻止,但它可能在您的本地计算机上工作。
-
很高兴听到它对你有用 ;-) 据我所知,wireshark 设法在防火墙启动之前捕获数据,所以你可能会遇到问题。
标签: c# networking tcp udp udpclient