我是newbi并尝试编写一个客户端代码,它从服务器接收数据并输出到文本框。 问题是当循环中的第二个 ServerStream.Read(inStream,0,inStream.Length)初始化 inStream 值时。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ServerStream.Read(inStream, 0, 5)
ReceivedData = Encoding.ASCII.GetString(inStream)
ServerStream.Flush()
If (String.Compare(ReceivedData, "_OK_") = 0) Then
msg(ReceivedData)
Do
Dim recv = ServerStream.Read(inStream, 0, inStream.Length)
ReceivedData = Encoding.GetEncoding("Windows-1252").GetString(inStream, 0, recv)
msg(ReceivedData)
If (String.Compare(ReceivedData, "END") = 0) Then
msg("Server closed")
End If
Loop While ServerStream.DataAvailable
Else
msg("Unable to recieve msg")
End If
End Sub
我在网站周围徘徊,但仍然不明白我做错了什么......
答案 0 :(得分:0)
第一次致电Read
:
ServerStream.Read(inStream, 0, 5)
你忽略它的返回值。它可能只读取1个字节。第二次使用(循环读取)会稍微好一些,但你似乎再次假设你将收到从连接另一端发送的整个“消息”(例如END
)。 / p>
没有这样的保证。您需要循环(并跟踪缓冲区中开始写入新接收数据的位置),直到您(以某种方式)检测到您已收到完整的“消息”。这通常通过以下方式完成: