2014-11-22 69 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