UDP数据从未发送过?

时间:2011-02-25 15:19:51

标签: c# asp.net http sockets udp

我正在尝试使用UDP发送HTTP GET请求(因为来自侦听服务器的回复是无关紧要的,我不想阻止该程序)

这是代码:

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(ref RemoteIpEndPoint)上,然后等待那里。似乎没有收到任何数据。

我试图改变......

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

为...

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

......但没有运气。

2 个答案:

答案 0 :(得分:3)

如果您不想阻止客户端,请使用异步套接字方法,但使用TCP。我怀疑你会找到一个在UDP上侦听HTTP请求的Web服务器。

您可能还想查看WireShark,它是一种网络流量记录工具;您可以使用它来查看您的UDP数据报很可能已被发送,但服务器没有生成响应。

您还可以在服务器上使用netstat,以查看它是否在UDP端口80上侦听。

答案 1 :(得分:0)

当服务器侦听TCP端口80时,它永远不会受到UDP帧的影响。

TCP和UDP是不同的协议。两者都支持“端口号”,但这些都不相关。

您可以通过读取UDP套接字上的响应来验证这一点。你应该得到一个错误的结果。相应的错误代码表示问题,帽子(通常)没人在UDP端口80监听。