How to handle incoming protobuf message
使用 TCPClient 的 NetworkStream 和 protobuf-net 我通过 TCP 发送和接收 protobuf 消息。
看到了一个类似的问题:如何正确处理带有 NetworkStream 的传入 protobuf 消息?
但就我而言,只能有一种消息类型,所以我认为我不需要解析器。
所以我序列化了我的对象并使用 tcp/ip 发送它,在我的服务器上我尝试反序列化它并获得 io 异常:无法从传输连接读取数据。
客户:
1 2 3 4 5 6 7 8 9 10 | ... using (var ms = new MemoryStream()) { Serializer.Serialize(ms, person); data = ms.ToArray(); } NetworkStream stream = client.GetStream(); stream.Write(data, 0, data.Length); |
服务器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ... Byte[] bytes = new Byte[256]; String data = null; while(true) { Console.Write("Waiting for a connection..."); TcpClient client = server.AcceptTcpClient(); Console.WriteLine("Connected!"); data = null; NetworkStream stream = client.GetStream(); Person newPerson = Serializer.Deserialize<Person>(stream);<--- exeption } |
我认为这里的简短版本是:使用
1 | stream.Write(ms.GetBuffer(), 0, (int)ms.Length); |