由于NetworkStream.Length
从未实现过,我还能看到网络流上已有多少数据可用。
注意我不能简单Read()
而DataAvailable=True
我在设置DataAvailable
时使用一个运行函数的线程,然后此函数应该关闭该批处理。< / p>
这是我的破碎功能,只是为了表明我想要实现的目标。
我的所有数据包都以[2 Bytes Size][1 Byte Type][Optional Payload]
Public Function readPacket() As PacketReader
'This cuts the stream of bytes into readable packets.
Try
If serverStream.DataAvailable Then
If packetSize = 0 Then
packetSize = serverReader.ReadUInt16()
packetType = serverReader.ReadByte()
End If
If packetSize = 0 Then
Return New PacketReader(packetType, New MemoryStream())
End If
If serverStream.Length >= packetSize Then
Dim packet() As Byte = serverReader.ReadBytes(packetSize)
Dim stream As Stream = New MemoryStream(packet)
Dim tmpPacketSize As UShort = packetSize
packetSize = 0
Return New PacketReader(packetType, tmpPacketSize, stream)
End If
End If
Catch e As Exception
formLobby.logMsg("Exception: " + e.ToString)
End Try
Return Nothing
End Function
答案 0 :(得分:0)
修正了事实证明。
您无法使用NetworkStream.Length
功能。
您需要改为使用TcpClient.Length
。
包含NetworkStream
又名
TcpClient.GetStream()
返回NetworkStream