C# 通过套接字发送不同类型的消息
我有一个tcp客户端,它可以发送不同类型的消息,我有点困惑如何使它工作。首先,客户机发送一个字符串(转换成字节[]),这可以正常工作,但随后我尝试发送一个序列化对象,我不知道如何做到这一点,也不知道如何让服务器理解消息不是字符串。 我试图发送的对象是RSA算法的公钥C# 通过套接字发送不同类型的消息,c#,serialization,tcp,rsa,C#,Serialization,Tcp,Rsa,我有一个tcp客户端,它可以发送不同类型的消息,我有点困惑如何使它工作。首先,客户机发送一个字符串(转换成字节[]),这可以正常工作,但随后我尝试发送一个序列化对象,我不知道如何做到这一点,也不知道如何让服务器理解消息不是字符串。 我试图发送的对象是RSA算法的公钥 IFormatter formatter=new BinaryFormatter(); formatter.Serialize(client.GetStream(),RSAParameterskeyinfo); 但我不知道如何
IFormatter formatter=new BinaryFormatter();
formatter.Serialize(client.GetStream(),RSAParameterskeyinfo);
但我不知道如何让服务器理解此消息不是字节[]。要让服务器了解他必须计算哪种类型的对象,必须在客户端和服务器之间共享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,因此每一方都知道消息
对象
有关
BinaryFormatter
的更多信息,请参见:编辑您的问题,以显示您是如何序列化和发送对象的,以及您是如何尝试在更简单的情况下读取对象的,只需使用WCF,这将为您完成所有工作。@JohnSaunders是的,这也是一个解决方案,但可能他没有访问.NET4和WCF的权限。(我有这个问题)我没有访问.Net 4的权限。还有其他方法吗?@user3475840我的回答没有帮助?