2010-04-17 226 views
0

这里是我的代码UDP协议不能接收到任何数据

Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
sck.Bind(new IPEndPoint(IPAddress.Any, 0)); 

// Broadcast to find server 
string msg = "Imlookingforaserver:" + udp_listen_port; 
byte[] sendBytes4 = Encoding.ASCII.GetBytes(msg); 
IPEndPoint groupEP = new IPEndPoint(IPAddress.Parse("255.255.255.255"), server_port); 
sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); 
sck.SendTo(sendBytes4, groupEP); 

//Wait response from server 
Socket sck2 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
sck2.Bind(new IPEndPoint(IPAddress.Any, udp_listen_port)); 
byte[] buffer = new byte[128]; 
EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, udp_listen_port); 
sck2.ReceiveFrom(buffer, ref remoteEndPoint); //<<< I never pass this line 

我用上面的代码,试图找到一个服务器。首先,我广播一条消息,然后等待服务器的响应。

我用C++编写的服务器进行测试,运行在Windows Vista中,客户端用C#编写,并且运行在与服务器相同的机器上。

问题是:服务器可以接收客户端广播的消息,但客户端无法从服务器接收任何东西。

我尝试用C++编写客户端,它的功能就像一个魅力,我认为我的问题是在C#客户端。

+0

你有没有试过在两台独立的机器上运行它,看看是否是这个问题? – 2010-04-17 03:09:03

回答

2

我会在广播之前开始在该端口上收听。您使用的是无连接的UDP,因此您可能会丢失数据包。

Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
sck.Bind(new IPEndPoint(IPAddress.Any, 0)); 
//Wait response from server 
Socket sck2 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
sck2.Bind(new IPEndPoint(IPAddress.Any, udp_listen_port)); 
byte[] buffer = new byte[128]; 
EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, udp_listen_port); 

// Broadcast to find server 
string msg = "Imlookingforaserver:" + udp_listen_port; 
byte[] sendBytes4 = Encoding.ASCII.GetBytes(msg); 
IPEndPoint groupEP = new IPEndPoint(IPAddress.Parse("255.255.255.255"), server_port); 
sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); 
sck.SendTo(sendBytes4, groupEP); 


sck2.ReceiveFrom(buffer, ref remoteEndPoint);