通过套接字</socket>发送列表<socket>客户端

时间:2014-11-22 03:28:36

标签: c# list sockets object serialization

我试图通过C#中的套接字发送List 这样做..

       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();
    }

但我永远不会从方法中获得返回字节[]。

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

1 个答案:

答案 0 :(得分:1)

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

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

如果您尝试在文件中存储Socket实例,那么如果您再次尝试打开该文件,则Socket实例中的值将没有任何意义。底层非托管套接字句柄,绑定地址以及可能的其他部分都不再与它们所代表的实际OS资源建立连接。

如果您尝试在另一台计算机上重新创建序列化Socket实例,情况也是如此,除非更多,因为这些值永远不会意味着该计算机上的任何内容。

所以,这个具体问题的答案是&#34;你不能,你甚至不应该尝试#34;。如果你有一个更广泛的目标,你想要实现,并希望帮助解决这个问题,你应该创建一个新的问题,具体说明你实际上要做什么,即你想要的最终结果。