我怎样才能收到很多彼此接近的字符串?

时间:2014-07-03 20:02:30

标签: vb.net string sockets

我正在制作一个需要非常快速发送/接收字符串(“命令”)的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".

我该如何解决这个问题? 感谢。

1 个答案:

答案 0 :(得分:0)

您假设Read一次读取“消息”。 TCP不是基于消息的。它为您提供无边界的字节流。查看消息框架。通常,这个问题可以通过在发送消息本身之前将每条消息的长度作为int来预先解决。