我有一個程序,其中客戶端同行通過TCP-IP相互通信。當一個客戶做某事時,他會一個接一個地告訴其他客戶,發生了這種情況。下面是我用跨發送數據的代碼:創建TcpClient似乎很慢。我可以緩存這些嗎?
public static string SendDirect(string data, string hostName, int portNumber)
{
string responseData;
try
{
var client = new TcpClient(hostName, portNumber);
Stream s = client.GetStream();
var sw = new StreamWriter(s) { AutoFlush = true };
sw.WriteLine(data);
s.Close();
client.Close();
s.Dispose();
sw.Dispose();
responseData = "OK";
}
catch (SocketException ex)
{
responseData = ex.Message;
}
return responseData;
}
線
VAR的客戶=新的TcpClient(主機名, 端口號);
對於某些機器來說可能會非常緩慢。例如,在我的家庭網絡中,需要2到3秒鐘的時間。你能看出15個客戶端的真實情況嗎?
我想知道有多昂貴,或者甚至有可能每次都不關閉客戶端,並始終保持其中的30-40個端口?我假設一些機制來檢查,以確保他們活着,並確保他們都正確關閉需要編碼,但我想知道如果想法本身是正確的..
謝謝!
解析主機名是什麼意思?你的意思是獲取IP並使用它們? 所以,你說我想要做的是正確的方式? OPening和保持40左右的連接不會傷害?因爲是的,正如你所看到的,我正在每條命令中打開/關閉其中的40個。 – katit
您是否有任何示例代碼需要保持/沖洗流?我所有的數據包都很小,現在低於1K。 – katit
如果您的基礎設施,設計等支持,保持打開狀態完全正常。特別是與永久性重新連接相比。解析DNS名稱是獲取與特定主機名匹配的IP的過程(無論如何,這應該由操作系統緩存,但仍然可能會導致一些緩慢)。要保持流,只是不要關閉它,不要處理該對象。要衝洗,大部分(如果不是全部)流支持「Flush()」方法。 – Mario