2011-02-25 93 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监听。