【问题标题】:C# - WireShark detects incomming packets but application does not receive themC# - WireShark 检测到传入的数据包,但应用程序没有收到它们
【发布时间】:2010-12-03 17:51:02
【问题描述】:

我遇到了一个奇怪的问题。我有一个客户端向我的服务器发送数据包,但我的服务器 UDP 套接字从不接收它们。如果我发送而他尝试接收,反过来也会发生同样的事情。

检查此图像,从 wireshark 捕获: http://img263.imageshack.us/img263/2636/bokus.png

我已将我的 UDP 套接字绑定到 EndPoint 192.168.2.3(服务器的内部 IP)和端口 9998。 客户端将数据发送到我的 IP,然后应将其转发到本地服务器计算机.. 如您所见,wireshark 清楚地检测到目标端口为 9998 的 192.168.2.3 的传入数据包,但没有发送任何内容!

(...为什么它在目的端口说 distinct32 btw?)

【问题讨论】:

  • 您的问题不知道可能出了什么问题。您的代码中可能存在错误。
  • 我不知道可能出了什么问题; UDP 套接字绑定到正确的 EndPoint 并从正确的 EndPoint 接收。 receiveFrom 回调永远不会被触发,我知道为什么会这样。除了错误的端点(我知道是正确的)之外,还有什么会影响这一点?
  • 最后一个问题:因为那是通常使用此端口的(非官方)服务:ports.my-addr.com/…
  • 您是否检查过防火墙是否在数据到达您的应用程序之前将其丢弃?
  • UDP/TCP 端口 9998 由“distinct32”服务或应用程序使用。我找不到任何关于它实际上是什么的信息。这就像 Wireshark 用“smtp”替换 TCP 端口 25。

标签: c# sockets udp wireshark


【解决方案1】:

另外需要注意的是确保您可能运行的任何防火墙都设置了规则以允许在您的端口 9998 上进行通信。

如果我不得不猜测(需要查看您接收的 C# 代码才能知道),看起来您可能正在尝试接收 UDP 数据包,但在客户端使用 TCP 协议。 (或者我可能只是误解了您屏幕截图的某些文字。)

使用 UDP 时无需“监听”连接。 UDP 数据包没有连接/断开协议。它们也不保证数据包的接收顺序与发送顺序相同。

尝试在你的 C# 客户端中使用类似的东西,看看你是否得到数据。

var udpClient = new System.Net.Sockets.UdpClient(9998);
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);

【讨论】:

  • 你好,不,它不工作 :( 我不知道为什么它不工作,TCP 工作正常,但 UDP 不行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多