C# 通过套接字发送不同类型的消息

C# 通过套接字发送不同类型的消息,c#,serialization,tcp,rsa,C#,Serialization,Tcp,Rsa,我有一个tcp客户端,它可以发送不同类型的消息,我有点困惑如何使它工作。首先,客户机发送一个字符串(转换成字节[]),这可以正常工作,但随后我尝试发送一个序列化对象,我不知道如何做到这一点,也不知道如何让服务器理解消息不是字符串。 我试图发送的对象是RSA算法的公钥 IFormatter formatter=new BinaryFormatter(); formatter.Serialize(client.GetStream(),RSAParameterskeyinfo); 但我不知道如何

我有一个tcp客户端,它可以发送不同类型的消息,我有点困惑如何使它工作。首先,客户机发送一个字符串(转换成字节[]),这可以正常工作,但随后我尝试发送一个序列化对象,我不知道如何做到这一点,也不知道如何让服务器理解消息不是字符串。 我试图发送的对象是RSA算法的公钥

 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我的回答没有帮助?