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

时间:2013-05-31 07:31:03

标签: windows-8 vb6 udp winsock

我有一个VB6 appl,其中我有一个函数,我发送消息(跟踪appl正在做什么)通过发送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

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

2 个答案:

答案 0 :(得分:1)

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

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

它像魔术一样:

答案 1 :(得分:0)

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

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