【发布时间】:2010-10-12 15:56:43
【问题描述】:
我是 C# 网络编程的新手。我发现 TCPListener 类对于在计算机之间发送文本非常有用,但我想知道是否可以在机器之间直接发送对象(假设客户端和服务器都有类定义),而不必先将它们转换为字符串然后再制作具有该数据的对象。
谢谢,
下午
【问题讨论】:
标签: c# networking tcplistener
我是 C# 网络编程的新手。我发现 TCPListener 类对于在计算机之间发送文本非常有用,但我想知道是否可以在机器之间直接发送对象(假设客户端和服务器都有类定义),而不必先将它们转换为字符串然后再制作具有该数据的对象。
谢谢,
下午
【问题讨论】:
标签: c# networking tcplistener
您的问题的一个解决方案是使用 WCF 并将您的对象标记为Serializable,并使用 TCP 绑定。但这与您已经拥有的“低级”、基于套接字的解决方案完全不同。不过,我会尝试一下 WCF。
【讨论】:
您不能直接通过网络发送“对象”。您必须将它们转换为可解析的二进制或文本形式。对于后者,xml 通常最适合。您可以为此使用BinaryFormatter 或XmlSerializer。
如果你真的想发送 .NET 对象,因为你只服务于 .net 客户端,tcp 可能会满足你的需要。在这种情况下,请查看 .net remoting,它允许您直接在服务器和客户端之间交换对象。
【讨论】:
只要两边的类定义相同,就可以使用二进制序列化将任意对象序列化为流:
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, objectToSerialize);
stream.Close();
不过,您最好使用上面提到的 WCF,因为如果在线路的任一侧对程序集进行版本控制,这将中断。
【讨论】: