当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

服务器无法在vb6中顺利接收字节数据

admin 155℃
我有一个发送者,一个消息转发器,它以每封消息5毫秒的速率将固定大小的字节数据发送给用vb6编写的接收程序,当我在一台机器上运行消息转发器和接收程序时,没有问题,但是当它们在不同的机器上运行时,接收程序开始出现一些异常。

例如:

private sub socket_DataArrival(index as integer, ByVal dataTotal as Long)

Dim Data() as Byte
Length.Text = dataTotal

socket.GetData byteData, vbArray + vbByte

If Length.Text = "100" Then
txtOutput.Text = "Message1"

ElseIf Length.Text = "150" Then
txtOutput.text = "Message2"

End Sub

我有时会收到'二合一'的消息,因为它是以250字节的形式出现的,或者是一个不可识别的字节大小,而我应该只接收100或150个字节,但如果我将发送速度降低到一个较慢的速度,比如每条消息50毫秒,那就没问题了。

有什么建议吗?谢谢。

当通过网络发送数据时,您必须习惯这样一个事实:数据包可能会无序、不及时、根本不及时地到达,等等。

您需要改进您的消息协议,使之包含一个头,该头说明了下面的消息类型。如果顺序很重要,请包含序列号(我假设您使用的是udp)。目前,您依赖于时间来分离消息,而这是您无法通过网络依赖的。

缓冲所有到达的数据并将其分块处理-头允许您判断要使用的块大小。将输入缓冲区与消息处理分离-使用dataarrival事件将数据添加到缓冲区,使用计时器或其他轮询缓冲区的方法检查它是否有准备好解析的消息。唉,这是vb6,所以线程不是那么容易。如果您需要一个不依赖于存在ui元素的计时器类,请查看The Common Controls Replacement Project计时器对象dll。

转载请注明:我的代码 » 服务器无法在vb6中顺利接收字节数据