У меня есть программа, в которой клиентские одноранговые узлы общаются друг с другом через TCP-IP. Когда один клиент делает что-то, он будет сигнализировать другим клиентам один за другим, что это произошло. Вот код, который я использую для отправки данных:
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;
}
Line
var client = new TcpClient (hostName,
номер_порт);
может быть очень медленным для некоторых машин. Например, в моей домашней сети это занимает 2-3 секунды. Можете ли вы увидеть, как это плохо с 15 клиентами.
Мне было интересно, насколько дорого или, если вообще возможно, не закрывать клиента каждый раз и постоянно держать 30-40 из них открытыми? Я предполагаю некоторый механизм, чтобы проверить, чтобы они были живы и чтобы все они были закрыты должным образом, должны быть закодированы, но мне интересно, верна ли сама идея ..
Спасибо!