2013-07-02 5 views
0

Поскольку 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 

ответ

0

Fixed получается. Вы не можете использовать функцию NetworkStream.Length. Вместо этого вам нужно использовать TcpClient.Length.

который содержит возвращается NetworkStream

ака

TcpClient.GetStream()NetworkStream