Windows 8 VB6应用程序通过winsock发送UDP广播消息-仅每秒发送一次消息

Windows 8 VB6应用程序通过winsock发送UDP广播消息-仅每秒发送一次消息,windows-8,vb6,udp,winsock,Windows 8,Vb6,Udp,Winsock,我有一个VB6应用程序,其中有一个函数,我通过发送UDP广播消息(到255.255.255.255或子网的广播地址172.16.7.255/11)来发送消息(跟踪应用程序正在执行的操作)。该函数是从应用程序中的不同位置调用的 我有另一个应用程序,它在同一个端口上监听并显示消息,我认为效果很好 我可以在我的子网中的任何主机上运行发送应用程序和侦听器应用程序,而且一切都正常。然而,当我在Windows8上运行发送应用程序时,我发现我只能看到每秒钟的消息。我的消息碰巧是有编号的,基本上我只看到奇数编号

我有一个VB6应用程序,其中有一个函数,我通过发送UDP广播消息(到255.255.255.255或子网的广播地址172.16.7.255/11)来发送消息(跟踪应用程序正在执行的操作)。该函数是从应用程序中的不同位置调用的

我有另一个应用程序,它在同一个端口上监听并显示消息,我认为效果很好

我可以在我的子网中的任何主机上运行发送应用程序和侦听器应用程序,而且一切都正常。然而,当我在Windows8上运行发送应用程序时,我发现我只能看到每秒钟的消息。我的消息碰巧是有编号的,基本上我只看到奇数编号的消息

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

  • 网络负载最小,在其他条件下,我看不到任何数据丢失
  • 消息非常小(每个小于100字节)
  • 当我从发送应用程序在同一主机或另一主机上运行侦听器时,我会看到相同的行为
  • 我可以以.exe或VB6 IDE运行该应用程序。在IDE中,我可以跨过winsock.SendData行,但我仍然看到每一秒的消息都在悄悄地蒸发
  • 在发送后,我尝试过执行
    睡眠
    和/或
    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

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

尝试使用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

我在VBA中遇到了一个类似的问题,即access 2010。对我来说,唯一能解决这个问题的就是这个(我知道这毫无意义)。重复此行两次:

Sock.RemoteHost = DestinationIP ( for example: "192.168.0.10")
Sock.RemoteHost = DestinationIP ( same value as in the above line)
它像魔术一样工作:


Joe

这与您发布的代码无关,UDP数据报不会在发送端丢失。很难理解为什么它如此重复,这个问题可能出现在任何地方。如果您不喜欢丢失数据,那么就使用TCP。如果在同一个Windows 8设备上运行两个应用程序,会发生什么情况?接收器是否能看到所有数据?另外,您说您已经确认侦听器应用程序与WireShark正常工作-WireShark是否也显示只有奇数条消息发出?同时运行我的主应用程序(丢失消息)和我的虚拟应用程序,这两个应用程序都在我看到的Win8框上(在同一个或子网上的另一个框中同时使用my listener应用程序和Wireshark)来自主应用程序的奇数消息和来自虚拟应用程序的所有消息。在XP框中,相同的测试将给出来自这两个应用程序的所有消息。感谢您的评论。