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

时间:2010-08-25 07:59:58

标签: vb6

我有一个发件人,一个邮件转发器,它以每个邮件5毫秒的速率向我在vb6中编写的接收程序发送固定大小的字节数据,当我在一台机器上运行邮件fowarder和我的接收程序时,没有问题但是当它们在不同的机器上运行时,接收程序开始出现一些异常。

e.g:

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

我有时会收到“2合1”消息,因为它只有250字节或不可识别的字节大小,当我应该只接收100或150但是如果我将发送速率降低到较慢的速度说每条消息50毫秒然后就可以了。

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:0)

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

您需要改进您的邮件协议,以包含一个标头,说明后面的邮件类型。如果顺序很重要,请包括序列号(我假设您正在使用UDP)。目前,您依靠时间来分离不能通过网络依赖的消息。

缓冲所有到达的数据并以块的形式处理 - 标题允许您告知要使用的块大小。将输入缓冲与消息处理分开 - 使用DataArrival事件将数据添加到缓冲区,使用Timer或其他一些轮询缓冲区来检查是否有准备解析的消息。唉,这是VB6所以线程并不那么容易。如果您需要一个不依赖于UI元素的Timer类,请查看The Common Controls Replacement Project计时器对象DLL。