2013-07-02 5 views
0

NetworkStream.Length이 구현되지 않았으므로 네트워크 스트림에서 얼마나 많은 데이터가 이미 사용 가능한지 알 수있었습니다..Net NetworkStream .Length가 구현되지 않았습니다. 얼마나 많은 데이터가 스트림에서 사용 가능한지 알 수 있습니다.

참고 DataAvailable=TrueDataAvailable이 설정되어있는 동안 함수를 계속 실행하는 스레드를 사용하는 경우이 함수는 해당 배치를 잘라야합니다.

여기 내 목표를 달성하기 위해 노력한 것만 보여줍니다.

내 모든 패킷은 밝혀 고정 [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

로 전송됩니다. NetworkStream.Length 기능을 사용할 수 없습니다. 대신 TcpClient.Length을 사용해야합니다. NetworkStream

일명

TcpClient.GetStream() 수익을 포함

NetworkStream