从流中读取数据的更好方法是什么?

时间:2015-01-04 01:28:26

标签: c# sockets tcp stream

目前我尝试实现基于tcp的通信。 通过这种方式,我在从网络流中读取时遇到了一些异常。 例如,阻止读取功能直到接收到数据。 有没有更好的方法从网络流中读取数据?

目前,我的“协议”的工作原理如下:

  1. 从字节转换的数据包类发送长度
  2. 发送字节转换的数据包类(id,类型,凭据,内容信息,内容)
  3. 从包类读取长度
  4. 阅读包类
  5. 从包类中读取包类型
  6. 按数据包类型(工厂)解析数据包类
  7. 所以这是我在tcp通信中的简单实现,有更好的方法吗?

    以下是一些代码:

    private void HandleThread()
    {
        using (var stream = _client.GetStream())
        {
            while (_client.Available > 0)
            {
                var buffer = new byte[4];
                stream.Read(buffer, 0, buffer.Length);
                var length = BitConverter.ToInt32(buffer, 0);
    
                buffer = new byte[length];
                stream.Read(buffer, 0, buffer.Length);
    
                var type = (PacketType)buffer[0];
    
                var parser = PacketFactory.Get(type);
                parser.Parse(buffer);
            }
        }
    }
    

0 个答案:

没有答案