[c#] UdpClient.Receive (...) erhält keine Daten



Answers

Question

Ich habe einen Socket-Server (geschrieben in C ++), der Anfragen von Clients empfängt und Antworten zurücksendet. Meine Test-Client-Anwendung (C #) ist also sehr einfach:

        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());
        }

Ich führe beide Anwendungen auf demselben Computer aus. Der Server empfängt vom Client-Port 10241 eine Anforderung an Port 10240 und sendet eine Antwort zurück an den Client-Port 10241, der Client erhält sie jedoch nie. Ich bin mir sicher, dass der Server das Paket zurücksendet, weil alles perfekt mit dem C ++ - Client funktioniert. Es bedeutet, dass ich mit meinem C # -Client etwas falsch mache. Irgendeine Idee?

Vielen Dank!

PS> Testen Sie es einfach mit Berkley Socket C # Client:

        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());
        }

Und es funktioniert perfekt! Was ist falsch mit UdpSocket?




Related



Tags

c# c#   sockets   udp