2011-02-25 139 views
0

我試圖與發送UDP HTTP GET請求(因爲從監聽服務器的回覆是不相關的,我不想阻止此程序)UDP數據永不發送?

這是代碼:

System.Net.Sockets.UdpClient client = new System.Net.Sockets.UdpClient(); 

client.Connect("www.domainname.com", 80); 
string request_header = "GET /ping.php HTTP/1.1\r\nHost: www.domainname.com\r\n\r\n"; 

byte[] stre = System.Text.Encoding.ASCII.GetBytes(request_header); 
client.Send(stre, stre.Length); 
System.Net.IPEndPoint RemoteIpEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Any, 0); 
byte[] receiveBytes = client.Receive(ref RemoteIpEndPoint); 
string returnData = System.Text.Encoding.ASCII.GetString(receiveBytes); 
client.Close(); 

首先,請求似乎沒有在服務器上被接收到,所以我想在發送時可能會出現錯誤? 其次,程序掛在client.Receive(參考RemoteIpEndPoint)上,並在那裏等待。似乎沒有收到任何數據。

我曾試圖改變......

System.Net.IPEndPoint(System.Net.IPAddress.Any, 0); 

到...

System.Net.IPEndPoint(System.Net.IPAddress.Any, 80); 

...但沒有運氣。

+4

HTTP over UDP,認真嗎?服務器是否在端口80上偵聽UDP請求?我對此表示懷疑。只需使用TCP並完成它。 – 2011-02-25 15:21:57

+0

好吧,所以UDP可能是錯誤的方式呢?我真正想要的是以最少的流程消耗方式來發送GET請求(不阻塞發送客戶端) – hbruce 2011-02-25 16:09:53

回答

3

如果您不想阻止客戶端,則使用異步套接字方法,但使用TCP。我懷疑你會發現一個Web服務器在UDP上偵聽HTTP請求。

您可能還想看看WireShark這是一個網絡流量記錄工具;你可以用這個來看你的UDP數據報最可能發送了,但服務器沒有產生任何響應。

你也可以在服務器上使用netstat來查看它沒有監聽UDP端口80.

0

當服務器在TCP端口80偵聽時,它將永遠不會受到UDP幀的影響。

TCP和UDP是不同的協議。兩者都支持「端口號」,但這些不相關。

您可以通過讀取UDP套接字上的響應來驗證。你應該得到一個錯誤結果。相應的錯誤代碼表明問題,帽子(通常)沒有人在UDP端口80監聽。