UdpClient Receive未接收数据报

本文关键字:数据报 Receive UdpClient | 更新日期: 2023-09-27 18:26:56

我试图为一个类项目编写一个TFTP客户端。使用UdpClient类,我可以成功地从服务器请求数据,但返回的数据包永远不会到达我的代码。

我的防火墙已关闭。我可以在wireshark中观察到返回的数据包,但UdpClient.Receive块是无限的。

mUdpClient在构造函数中初始化如下:mUdpClient = new UdpClient();

mUdpClient的连接方式与类似

public void connect(String host, int port) {
    mServerAddress = System.Net.Dns.GetHostAddresses(host)[0];
    var endPoint = new IPEndPoint(mServerAddress, port);
    mUdpClient.Connect(endPoint);
}

连接后,我发送我的请求,该请求是成功的(如wireshark中所观察到的)

这就是我的接收代码看起来像

private void receiveResponse() {
    var newEndpoint = new IPEndPoint(IPAddress.Any, 0);
    byte[] response = mUdpClient.Receive(ref newEndpoint);
    Console.Out.WriteLine(response);
}

这已经在我的Surface Pro和在Debian下运行的Windows 8.1 VirtualBox虚拟机上进行了测试。

UdpClient Receive未接收数据报

请注意,由于您在UDP套接字上使用Connect()方法,因此您将只能看到实际从该IPEndPoint发送的数据报。如果您的远程主机出于某种原因使用不同的IPEndPoint将数据发送回您,您将看不到它。因此,也许可以尝试不使用默认主机功能(即,不要调用Connect…只需在每次send()调用时提供远程IPEndPoint)。