C中的UDP服务器和C#中的客户端,服务器接收但客户端不接收

时间:2014-06-03 21:24:32

标签: c# sockets networking udp

我在带有NAT连接的VM上运行C中的UDP服务器,我从这里借用了这个示例: http://www.binarytides.com/programming-udp-sockets-c-linux/

UDP服务器绑定套接字并执行recvfrom以从客户端接收消息。然后它发送回复。这似乎工作正常。当我使用netcat或示例中给出的客户端来测试连接时,发送和接收都是可行的。

现在,我正在尝试让UDP服务器与C#客户端进行通信。我有一个C#客户端,它使用UdpClient类的异步接收(BeginReceive / EndReceive)。我还做了一个C#服务器只是为了测试,我可以在C#客户端和C#服务器之间进行通信,在同一本地网络中的另一台机器上运行C#服务器。

C#客户端正在运行C服务器的Linux VM的Windows 7主机上运行。以前,我使用两个不同的套接字进行发送和接收,然后C#客户端能够与C服务器通信。现在,我正在尝试为两者使用单个套接字,现在我只能进行单向通信:C服务器可以从C#客户端接收消息,并且可能会发回消息,但C#客户端根本不会收到任何消息。

C#客户端正在使用此代码:

            IPEndPoint e = new IPEndPoint(ServerIP, 11000); // server endpoint
            UdpClient u = new UdpClient(11000);
            UdpState s = new UdpState();
            s.e = e;
            s.u = u;

            u.BeginReceive(new AsyncCallback(DataReceivedUdp), s);

UdpState在别处被定义为:

    class UdpState
    {
        public UdpClient u;
        public IPEndPoint e;
    }

上述代码中的ServerIP是用户输入的IP地址,已转换为IPAddress类型。我曾尝试在那里的IP地址进行硬编码(使用IPAddress.Parse(" 192.x.x.x。"))并尝试过:

            IPEndPoint e = new IPEndPoint(IPAddress.Any, 11000); // server endpoint

我有一个调试器消息作为函数DataReceived(ISyncResult ar)中的第一行,每当从UDP服务器收到消息时都应该触发它,并且它永远不会打印出来(或者在该函数中做任何其他事情)。我确实知道BeginReceive已经启动了,因为我有一个调试器线告诉我。

有什么想法?我有一段时间一直撞到这个人的头上,用另一双眼睛看着它并告诉我是否遗漏了一些明显的东西会很棒。提前谢谢。

0 个答案:

没有答案