【问题标题】:Sending List<Socket> Clients by Socket通过 Socket 发送 List<Socket> 客户端
【发布时间】:2014-11-22 03:28:35
【问题描述】:

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

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

但我从来没有从方法中得到返回字节[]..

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

【问题讨论】:

    标签: c# list sockets object serialization


    【解决方案1】:

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

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

    如果您尝试将Socket 实例存储在文件中,那么如果您尝试再次打开该文件,Socket 实例中的值将没有任何意义。底层的非托管套接字句柄、绑定地址,也许还有其他部分,都不再与它们所代表的实际操作系统资源建立联系。

    如果您尝试在另一台机器上重新创建序列化的Socket 实例,情况也是如此,但更是如此,因为这些值在另一台机器上从不意味着任何东西。

    所以,这个特定问题的答案是“你不能,你甚至不应该尝试”。如果您有一些想要实现的更广泛的目标并希望帮助解决这个问题,您应该创建一个新问题,具体说明您实际尝试做的事情,即您希望获得的最终结果。

    【讨论】:

    • 感谢您的回答!
    猜你喜欢
    • 2013-04-24
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2023-04-03
    • 2012-03-06
    • 1970-01-01
    相关资源
    最近更新 更多