Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UdpClient接收未接收数据报_C#_Visual Studio 2012_Udp - Fatal编程技术网

C# UdpClient接收未接收数据报

C# UdpClient接收未接收数据报,c#,visual-studio-2012,udp,C#,Visual Studio 2012,Udp,我正在尝试为一个类项目编写一个TFTP客户机。 使用UdpClient类,我可以成功地从服务器请求数据,但返回的数据包从未到达我的代码 我的防火墙已关闭。 我可以在wireshark中观察返回的数据包,但UdpClient.Receive会无限期地阻塞 mUdpClient在构造函数中的初始化方式如下:mUdpClient=new UdpClient() mUdpClient是这样连接的 public void connect(String host, int port) { mServ

我正在尝试为一个类项目编写一个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虚拟机上进行了测试

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

如果没有更多代码和可靠的复制案例,很难说。也就是说:在发送第一个数据报之后,在调用Receive()之前要等待多长时间?到那时,操作系统是否已经丢弃了入站数据报?另外,请注意,由于您在UDP套接字上使用Connect()方法,因此您将只看到从该IP地址实际发送的数据报。如果您的远程主机出于某种原因使用不同的IP地址将数据发送回您,您将看不到它。因此,可以尝试不使用默认主机功能(即,不要调用Connect…只需在每次Send()调用中提供远程IP地址)。还请注意,如果入站数据报来自数据报发送到的原始地址,则某些防火墙和NAT路由器将仅通过隧道将其传回发送方。wireshark对入站UDP流量怎么说?我在连接后立即呼叫receive。我将在不调用connect的情况下发送,但在这种情况下,数据将始终来自同一IP,因此我不确定这是否会产生影响。Wireshark向我展示了返回的数据正在到达我的手中,您是否希望我挖掘任何其他具体信息?我对wireshark有点陌生。原来连接是个问题。很奇怪。它现在似乎正在工作。如果你回答这个问题,我会把它标记为已解决。。。。从那个IP地址和UDP端口。是的,对不起。我应该写“IPEndPoint”,这当然是一个地址和端口。我因马虎而受责备。我会找到答案的。