Поскольку NetworkStream.Length
никогда не реализовывался, как еще я мог видеть, сколько данных уже доступно в сетевом потоке..Net NetworkStream .Length не реализовано, как узнать, сколько данных доступно в потоке.
Примечание Я не могу просто только Read()
в то время как DataAvailable=True
я использую нить, где она продолжает работать функцию в то время как DataAvailable
установлен, то эта функция должна вырезать эту партию прочь.
Вот моя сломанная функция, чтобы показать, чего я пытаюсь достичь.
Все мои пакеты посылаются с [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