【问题标题】:UDP data never sent?UDP数据从未发送?
【发布时间】:2011-02-25 15:19:50
【问题描述】:

我正在尝试使用 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);

...但没有运气。

【问题讨论】:

  • HTTP over UDP,真的吗?服务器是否甚至在端口 80 上侦听 UDP 请求?我对此表示怀疑。只需使用 TCP 就可以了。
  • 好的,那么 UDP 可能是错误的方式吗?我真正想要的是发送 GET 请求的最少进程消耗方式(不阻塞发送客户端)

标签: c# asp.net http sockets udp


【解决方案1】:

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

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

您还可以在服务器上使用 netstat 来查看它没有在 UDP 端口 80 上侦听。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2018-06-26
      • 2020-09-27
      • 2012-05-17
      • 1970-01-01
      • 2013-09-15
      相关资源
      最近更新 更多