C#tcp套接字如何判断正在发送什么类型的对象?

时间:2012-02-17 19:17:06

标签: c# .net sockets tcp

如果服务器端代码如下所示,如何判断通过套接字发送的对象类型

        NetworkStream stream = socket.GetStream();
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(stream,objectToBeSent);

2 个答案:

答案 0 :(得分:3)

您可以知道正在发送什么类型的对象的唯一方法是,如果在消息中发送了一些元数据来指示它是什么。两个端点都应该知道序列化模式,以便每个端点都可以适当地序列化和反序列化。这是(或应该)您为套接字通信定义的协议的一部分。

答案 1 :(得分:1)

在客户端上,我想您将要读取服务器发送的数据并将其反序列化:

object sentObject = formatter.Deserialize(stream);
Type objectType = sentObject.GetType();

为此,您显然需要在客户端上包含包含序列化类型的程序集。

哦,请记住,BinaryFormatter类使用不可互操作的格式。这意味着如果您在客户端和服务器上使用不同版本的.NET frmaeowrk,则可能无效。如果是这种情况,您应该使用一些可互操作的数据格式协议在服务器和客户端之间交换信息。