2010-04-17 224 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);