.Net NetworkStream .Length没有实现如何知道流上可用的数据量

时间:2013-07-02 20:14:07

标签: stream packet networkstream packets

由于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

1 个答案:

答案 0 :(得分:0)

修正了事实证明。 您无法使用NetworkStream.Length功能。 您需要改为使用TcpClient.Length

包含NetworkStream

又名

TcpClient.GetStream()返回NetworkStream