VB6异步Tcp客户端截断传入的消息

2 vb6 networking tcp

我有一个C#Tcp服务器,它向已注册的VB6 Tcp客户端发送消息.消息的接收是以异步方式使用WinSock完成的.所以"完成"消息的VB6部分看起来像:

Private Sub wskConnect_DataArrival(ByVal bytesTotal As Long)
   Dim sBuff As String
   wskConnect.GetData sBuff, vbString       '-- Retrieve sent value
   ProcessMessage sBuff                     '-- Process the value
End Sub
Run Code Online (Sandbox Code Playgroud)

问题是C#Tcp服务器正在发送一个长度为6874的字符串,但是当我们检查DataArrival事件触发时收到的消息大小时,它只测量2920.所以很明显这个传入消息的截断是严重的问题.

有没有人观察过这个?

tca*_*vin 8

正如我在这里所说的VB6 WinSock TCP客户端和.NET TCP服务器:

这是一种常见的误解,即您正在接收消息.您正在接收字节流.sBuff可能包含1个字节,它可能包含的是什么使你的消息,经常(如果他们足够小的),它可以conatin邮件的100%,有时它可以包含超过100%,50%(这意味着它有一些部分下一条消息).没有看到ProcessMessage中的代码我不能确定你有问题,但你应该确保该方法可以处理所有这些场景

仅仅因为您在DataArrival上只看到数据长度为2920并不意味着数据被截断.它只是意味着那一刻就可以获得.将该数据读入缓冲区,然后当您发送的数据的下一部分可用时,该事件将再次触发.继续读取可用数据并附加到缓冲区,直到您收到整条消息.