我們需要與另一個想通過原始tcp/ip套接字通信與我們溝通的系統通話。什麼是適當的.Net對象,如果有的話,用於這個?哪個.Net組件應該用於tcp/ip套接字通信?
如果您知道第三方組件,開源組件等,您認爲使用起來更好,請隨時提及。
我們需要與另一個想通過原始tcp/ip套接字通信與我們溝通的系統通話。什麼是適當的.Net對象,如果有的話,用於這個?哪個.Net組件應該用於tcp/ip套接字通信?
如果您知道第三方組件,開源組件等,您認爲使用起來更好,請隨時提及。
System.Net.Sockets.Socket
http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx
的TcpClient的是最常見的,但我更喜歡Socket類自己。要麼會工作。
我會使用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)
插槽&的TcpClient都非常易於管理和高效。他們一定會做你需要的。有兩種使用異步模式的很好的理由。
被警告有一些線程問題。例如,一些異步方法將在調用線程退出時終止。有很多非常低效/糟糕的.NET多線程服務器例子,所以要小心。最後要注意的是異常處理。通常你只是得到一個「SocketException」,並且必須檢查它來確定發生了什麼。如果有幾個派生的可以獨立處理的SocketException類,那將是非常好的。
但是,不要讓我氣餒,一旦你的代碼得到實現並運行起來,它將繼續「繼續工作」。
我們公司使用Dart Socket.net,它基本上將system.net.sockets.socket包裝成非常易於使用的方法/組件以及具有自己的功能。我推薦他們用於Windows窗體應用程序。他們在演示中附帶了很多示例,並且有一個積極的支持論壇,您可以發佈問題並從中獲得支持/建議。
檢查出來,在Dart.com http://www.dart.com/ptsknet.aspx
'TcpClient'應始終贊成Socket'的'被使用,因爲它包裹多的有關TCP通信的功能。你自己重新發明真的沒有意義。 – Noldorin 2009-08-07 23:26:40