我正在尝试使用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);
......但没有运气。
答案 0 :(得分:3)
如果您不想阻止客户端,请使用异步套接字方法,但使用TCP。我怀疑你会找到一个在UDP上侦听HTTP请求的Web服务器。
您可能还想查看WireShark,它是一种网络流量记录工具;您可以使用它来查看您的UDP数据报很可能已被发送,但服务器没有生成响应。
您还可以在服务器上使用netstat,以查看它是否在UDP端口80上侦听。
答案 1 :(得分:0)
当服务器侦听TCP端口80时,它永远不会受到UDP帧的影响。
TCP和UDP是不同的协议。两者都支持“端口号”,但这些都不相关。
您可以通过读取UDP套接字上的响应来验证这一点。你应该得到一个错误的结果。相应的错误代码表示问题,帽子(通常)没人在UDP端口80监听。