【发布时间】:2018-12-18 11:11:51
【问题描述】:
我有两个程序。用服务器创建 发现服务器消息 并通过protobuf序列化并通过ZMQ发送。在客户端反序列化消息但错误:
Ivalid wire-type; this usually means you have over-written a file without truncating or setting the length.
我在 dll 项目中有以下类。
[ProtoContract]
public class DiscoverServerMessage
{
[ProtoMember(1)]
public int Port { get; set; }
[ProtoMember(2)]
public string IP { get; set; }
[ProtoMember(3)]
public string ServerName { get; set; }
public DiscoverServerMessage() { }
}
在服务器项目中有这个代码:
public class Server
{
static void Main(string[] args)
{
ZContext ctx = new ZContext();
ZSocket broadcastSrocket = new ZSocket(ctx, ZSocketType.PUB);
broadcastSrocket.Connect("tcp://127.0.0.1:2666");
ZFrame zfr;
DiscoverServerMessage message = new DiscoverServerMessage() { Port = 2667 , ServerName = "My" };
message.IP = "127.0.0.1";
using (MemoryStream str = new MemoryStream())
{
Serializer.SerializeWithLengthPrefix(str,message,PrefixStyle.Fixed32);
zfr = new ZFrame(str.ToArray());
}
broadcastSrocket.Send(zfr);
}
}
在客户端程序中:
public class Server
{
static void Main(string[] args)
{
ZContext ctx = new ZContext();
ZSocket subSocket = new ZSocket(ctx, ZSocketType.SUB);
subSocket.Connect("tcp://127.0.0.1:2666");
subSocket.SubscribeAll();
ZError err;
ZFrame zfr = subSocket.ReceiveFrame(out err);
DiscoverServerMessage message;
using (MemoryStream stream = new MemoryStream(zfr.Read()))
{
message = Serializer.DeserializeWithLengthPrefix<DiscoverServerMessage >(stream,PrefixStyle.Fixed32);
}
}
}
我的错误是什么?
【问题讨论】:
-
注意 - 在客户端代码中,您的意思是
DeserializeWithLengthPrefix<DiscoverServerMessage>吗? (您输入了<T>,但这不是通用代码) -
谢谢你。我编辑我的问题
标签: c# deserialization zeromq protobuf-net