Замедление в соединениях tcpclient
Привет,
Я написал клиент-серверное приложение, я использовал TcpServer и TcpClient объекты, чтобы включить эту связь.
На стороне сервера у меня не было никаких проблем. Кажется, что когда клиент выполняет запрос, сервер отвечает так быстро. Но на стороне клиента есть небольшое замедление при инициализации TcpClient.
Как использовать одну инициализацию TcpClient для всех запросов?
Спасибо!
Что я уже пробовал:
Я написал этот метод:
TcpClient TcpClient = null; NetworkStream TcpClientStream = null; public string SendRequest(string command, out string response) { TcpClient = new TcpClient(TcpAddress, TcpPort); // [1] TcpClientStream = TcpClient.GetStream(); // [2] byte[] msg = Encoding.ASCII.GetBytes(command); TcpClientStream.Write(msg, 0, msg.Length); byte[] result = new byte[0]; msg = new byte[TcpClient.ReceiveBufferSize]; int i; while ((i = TcpClientStream(Read(msg, 0, msg.Length)) > 0) { Array.Resize(ref result, result.Length + i); Array.Copy(msg, 0, result, result.Length - i, i); } TcpClientStream.Close(); TcpClientStream = null; // [3] TcpClient.Close(); TcpClient = null; // [4] return Encoding.ASCII.getString(result); }
Результат: каждый раз, когда инициализируется TcpClient (
[1]
) происходит замедление примерно на секунду.Я попытался оставить TcpClient открытым заменив это утверждение на:
if (TcpClient == null) TcpClient = new TcpClient(TcpAddress, TcpPort);
и комментируя
[4]
заявление, но [2]
вызывает исключение InvalidOperationException (сокет не подключен).Я попытался проверить, не был ли он подключен сразу после этого
[1]
:if (!TcpClient.Connected) TcpClient.Connect(TcpAddress, TcpPort);
объект TcpClient.Connected-это false, но метод Connect вызывает исключение SocketException (сокет уже подключен)
Я также попытался оставить TcpClientStream открытым.
[3]
и замена [2]
с:if (TcpClientStream == null) TcpClientStream = TcpClient.GetStream();
и это, кажется, работает лучше. В TcpClientStream.Запись выполняется нормально и без какого-либо замедления, но сервер не получает сообщение.