2009-08-07 63 views
3

我們需要與另一個想通過原始tcp/ip套接字通信與我們溝通的系統通話。什麼是適當的.Net對象,如果有的話,用於這個?哪個.Net組件應該用於tcp/ip套接字通信?

如果您知道第三方組件,開源組件等,您認爲使用起來更好,請隨時提及。

回答

1

的TcpClient的是最常見的,但我更喜歡Socket類自己。要麼會工作。

8

我會使用TcpClient。它位於Socket之上,是Socket上的一個抽象。 TcpClient具有返回Stream對象的GetStream。然後要讀取流,您可以簡單地使用流讀取器。

例如:

tcpClient = new TcpClient(host, port) 
          { 
           ReceiveTimeout = readTimeout 
          }; 
      stream = tcpClient.GetStream(); 
      streamReader = new StreamReader(stream, Encoding.ASCII); 
      streamWriter = new StreamWriter(stream, Encoding.ASCII) 
           { 
            AutoFlush = true 
           }; 

      return this; 

,然後允許(片段):

小號treamReader.Read(myReadBuffer, 0, myReadBuffer.Length)

1

插槽&的TcpClient都非常易於管理和高效。他們一定會做你需要的。有兩種使用異步模式的很好的理由。

被警告有一些線程問題。例如,一些異步方法將在調用線程退出時終止。有很多非常低效/糟糕的.NET多線程服務器例子,所以要小心。最後要注意的是異常處理。通常你只是得到一個「SocketException」,並且必須檢查它來確定發生了什麼。如果有幾個派生的可以獨立處理的SocketException類,那將是非常好的。

但是,不要讓我氣餒,一旦你的代碼得到實現並運行起來,它將繼續「繼續工作」。

2

我們公司使用Dart Socket.net,它基本上將system.net.sockets.socket包裝成非常易於使用的方法/組件以及具有自己的功能。我推薦他們用於Windows窗體應用程序。他們在演示中附帶了很多示例,並且有一個積極的支持論壇,您可以發佈問題並從中獲得支持/建議。

檢查出來,在Dart.com http://www.dart.com/ptsknet.aspx