3

我有一个 VB6 应用程序,其中我有一个功能,我通过发送 UDP 广播消息(到 255.255.255.255 或子网的广播地址 172.16.7.255/11)发送消息(以跟踪应用程序正在做什么)。该函数是从应用程序中的各个位置调用的。

我有另一个应用程序在同一端口上侦听并显示我认为可以正常工作的消息。

我可以在我的子网中的任何主机上运行发送应用程序和侦听器应用程序,并且一切似乎都工作正常。但是,当我在 Windows 8 机器上运行发送应用程序时,我发现我只看到每秒钟的消息。我的消息恰好是编号的,基本上我只看到奇数编号的消息。

我试图通过以下方式消除一些可能的问题:

  • 网络负载极小,在其他情况下我看不到任何数据丢失
  • 消息非常小(每个不到 100 字节)
  • 当我在同一主机或来自发送应用程序的另一台主机上运行侦听器时,我看到了相同的行为。
  • 我可以将应用程序作为 .exe 或在 VB6 IDE 中运行。在 IDE 中,我可以跨过 winsock.SendData 行,我仍然可以看到每一秒消息都在悄悄消失
  • 我试过在发送后做一个Sleep和/或DoEvents
  • 我尝试使用 winsock 事件 SendComplete 但我怀疑这些事件不是为 UDP 引发的
  • 我编写了另一个小型 VB6 应用程序,它只是以相同的方式发送多个 UDP 广播 - 在这种情况下,所有消息都由侦听器正确发送和接收。
  • 在其他机器(仍在运行 XP)上运行应用程序工作正常
  • 我想知道是否每第二条消息都会发送到其他地方。这台机器只有一个网卡。
  • 我已经确认侦听器应用程序使用 WireShark 可以正常工作。

相关代码为:

Private WithEvents sock As Winsock
Public Sub Init()
    Set sock = new Winsock
End Sub
Public Sub Send(msg As String)
    sock.RemoteHost = "255.255.255.255"
    sock.RemotePort = 17907
    sock.SendData msg
End Sub

关于可能出了什么问题的任何建议,或者我可以做的进一步测试。

4

2 回答 2

1

我在 VBA 中遇到了类似的问题,访问 2010。唯一为我解决了这个问题的是这个(我知道这没有任何意义)。重复此行两次:

Sock.RemoteHost = DestinationIP ( for example: "192.168.0.10")
Sock.RemoteHost = DestinationIP ( same value as in the above line)

它就像魔术一样工作:

于 2015-07-06T22:32:23.077 回答
0

尝试使用Bind为您的应用设置本地端口:

Private WithEvents sock As Winsock
Public Sub Init()
    Set sock = new Winsock
    sock.Bind 17000 'Or any other high port
End Sub

Public Sub Send(msg As String)
    sock.RemoteHost = "255.255.255.255"
    sock.RemotePort = 17907
    sock.SendData msg
End Sub
于 2013-08-02T12:44:12.353 回答