我有一个tcp客户端,它发送不同类型的消息,我有点困惑如何使这项工作。首先客户端发送一个字符串(转换为byte [])并且工作正常然后我尝试发送序列化对象而我不知道如何做到这一点以及如何让服务器理解消息不是字符串。 我试图发送的对象是RSA算法的公钥
IFormatter formatter=new BinaryFormatter();
formatter.Serialize(client.GetStream(),RSAParameterskeyinfo);
但我不知道如何让服务器理解这条消息不是一个字节[]。
答案 0 :(得分:1)
要让服务器了解他必须计算哪种类型的对象,您必须在客户端和服务器之间共享一个dll。这里的难点是处理这个dll的版本(当你想要在客户端和服务器之间共享的对象上进行更改时,你必须更新每一侧的dll)
然后使用BinaryFormatter
序列化/反序列化您的对象。
首先在客户端通过以下方式序列化您的对象:
MyMessage msg = new MyMessage("My custom message")
byte[] data;
using(var ms = new MemoryStream()) {
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, msg);
data = ms.ToArray();
/*
* Send to stream
*/
}
然后在服务器大小上,你必须反序列化它:
/*
* Get the network stream
*/
BinaryFormatter formatter = new BinaryFormatter();
MyMessage msg = (MyMessage) formatter.Deserialize(myStream);
当他们共享相同的dll时,每一方都知道Message
对象。
有关BinaryFormatter
的更多信息,请参阅:http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter(v=vs.110).aspx