UdpClient.Receive(…)不接收任何数据

本文关键字:任何 数据 Receive UdpClient | 更新日期: 2023-09-27 18:15:58

我有一个套接字服务器(用c++编写),它接收来自客户端的请求并发送响应。因此,我的测试客户端应用程序(c#)非常简单:

        try {
            UdpClient udpClient = new UdpClient(10241);
            // Connect
            udpClient.Connect(server_ip_address,  10240);
            // prepare the packet to send
            iWritableBuff wbuff = new iWritableBuff();
            [ ... ]
            // Send 
            udpClient.Send(wbuff.GetBuff(), (int)wbuff.Written());
            // Receive a response
            IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
            Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); 
            Console.WriteLine("We've got some data from the server!!! " + receiveBytes.Length + " bytes.");
            udpClient.Close();
        } catch (Exception e) {
            Console.WriteLine("ERROR: " + e.ToString());
        }

我在同一台计算机上运行这两个应用程序。服务器从客户端端口10241接收到端口10240的请求,并将响应发送回客户端端口10241,但客户端从未接收到它。所以,我确信服务器会发送数据包回来,因为一切都与c++客户端完美配合。这意味着我在c#客户端上做错了什么。任何想法?

谢谢!

注:>用Berkley Socket c#客户端测试一下:

        try {
            // Create socket
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            // Bind
            IPEndPoint myEP = new IPEndPoint(IPAddress.Any, 0);
            s.Bind(myEP);
            // prepare the packet to send
            iWritableBuff wbuff = new iWritableBuff();
            [ ... ]
            // Send it
            IPEndPoint sEP = new IPEndPoint(IPAddress.Parse(server_ip_address), 10240);
            int res = s.SendTo(wbuff.GetBuff(), (int)wbuff.Written(), 0, sEP);
            // Receive the response
            byte[] receiveBytes = new Byte[1024];
            EndPoint recEP = new IPEndPoint(IPAddress.Any, 0);
            res = s.ReceiveFrom(receiveBytes, ref recEP);
            Console.WriteLine("We've got some data from the server!!! " + res + " bytes.");
        } catch (Exception e) {
            Console.WriteLine("ERROR: " + e.ToString());
        }

它工作完美!UdpSocket有什么问题?

UdpClient.Receive(…)不接收任何数据

不确定这是否适用于不广播数据包而只是将数据包发送到指定地址的udpclient,但我遇到了类似的障碍。

我有一个UDPClient,它广播一个udp数据包,用于发现我们网络上的一些自定义机器。当我试图接收服务器将简单地回显的消息时,它不会接收到该信息并将超时。事实证明,如果您使用广播消息的UDPClient,它将无法接收回消息。它没有记录在任何地方,除了我幸运地在msdn上遇到的一个论坛主题。

解决方案是发送消息,立即关闭套接字,在同一端口上打开一个新的UDPClient,然后使用这个新的UDPClient接收回显的UDP数据包。很烦人。

试一试,看看它是否有效。它绝对适用于发送广播数据包。