2014-11-22 33 views
0

我试着通过套接字在C# 通过这样传递一个List ..通过套接字发送列表<Socket>客户

 client = new List<Socket>(); 
     Socket.Send(ObjectToByteArray(client)); 

其中ObjectToByteArray是

private byte[] ObjectToByteArray(Object obj)/
    { 
     if (obj == null) 
      return null; 
     BinaryFormatter bf = new BinaryFormatter(); 
     MemoryStream ms = new MemoryStream(); 
     bf.Serialize(ms, obj); 
     return ms.ToArray(); 
    } 

,但即时通讯从来没有得到回报的byte [ ]从方法..

任何帮助?有另一种通过套接字发送对象的方式吗? 我的猜测是Socket列表永远不会结束,因为它永远不会停止接收信息。有没有办法关闭它然后重新打开它?

回答

1

这个目标注定要失败。我不知道你的意思是“我从来没有从方法中得到返回字节[]”(你说的ObjectToByteArray方法永远不会返回?),但它并不重要,因为Socket类不是可序列化的。

它没有办法以任何有用的方式:序列化主要用于保存一些数据(例如在一个文件中)或发送一些数据到其他机器。在这两种情况下都没有任何实际的方法可以将Socket实例转换为字节,然后返回到Socket实例。

如果您试图在文件中存储Socket实例,那么如果您试图再次打开该文件,则Socket实例中的值无意义。基础的非托管套接字句柄,绑定地址以及其他部分都不再与它们所代表的实际操作系统资源建立连接。如果你试图重新序列化Socket实例另一台机器上,但更应如此

同样的事情是真实的,因为这些价值从未意味着其他机器上的任何东西。

因此,这个具体问题的答案是“你不能,而且你甚至不应该尝试”。如果你有一些更广泛的目标,并希望能够帮助解决这个问题,那么你应该创建一个新的问题,具体说明你实际想要做什么,即你想要达到什么样的最终结果。

+0

感谢您的回答! – 2014-11-22 04:28:49