.Net NetworkStream.Length未实现如何知道流上有多少数据可用
由于从未实现过.Net NetworkStream.Length未实现如何知道流上有多少数据可用,stream,packet,networkstream,packets,Stream,Packet,Networkstream,Packets,由于从未实现过NetworkStream.Length,我如何才能看到NetworkStream上已有多少数据可用 注意,我不能简单地Read()而DataAvailable=True我使用一个线程,在设置DataAvailable时它会一直运行一个函数,那么这个函数应该切断该批处理 这是我的坏函数,只是为了说明我正在努力实现什么 我的所有数据包都是用[2字节大小][1字节类型][可选负载]发送的。 Public Function readPacket() As PacketReader
NetworkStream.Length
,我如何才能看到NetworkStream上已有多少数据可用
注意,我不能简单地Read()
而DataAvailable=True
我使用一个线程,在设置DataAvailable
时它会一直运行一个函数,那么这个函数应该切断该批处理
这是我的坏函数,只是为了说明我正在努力实现什么
我的所有数据包都是用[2字节大小][1字节类型][可选负载]发送的。
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
修正了结果。
您不能使用NetworkStream.Length
函数。
您需要改用TcpClient.Length
其中包含NetworkStream
阿卡
TcpClient.GetStream()
返回NetworkStream