我正在制作一个需要非常快速发送/接收字符串(“命令”)的VB.NET应用程序但是有这个小问题:当我用客户端非常快速地发送2个或更多连续字符串时,服务器收到只包含一个包含所有先前字符串的字符串。
这是我的发送子(客户):
Public Sub send(ByVal s As String)
Dim temp() As Byte = UTF8.GetBytes(s)
Try
stream.Write(temp, 0, temp.Length)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
这是我接收Sub(服务器,使用线程):
Public Sub listen()
Do
If client.Available > 0
Dim temp(client.Available - 1) As Byte
stream.Read(temp, 0, temp.Length)
Dim text As String = UTF8.GetString(temp)
'some checks on the string (example = if text.StartWith("something") then...)
End If
Loop
End Sub
以下是发生的事情的一个例子:
Client:
send("1"),
send("2"),
send("hello"),
send("18").
String received by Server: "12hello18".
我该如何解决这个问题? 感谢。
答案 0 :(得分:0)
您假设Read一次读取“消息”。 TCP不是基于消息的。它为您提供无边界的字节流。查看消息框架。通常,这个问题可以通过在发送消息本身之前将每条消息的长度作为int来预先解决。