Каждый раз, когда вызывается этот метод, создается новый экземпляр TcpClient
:
TcpClient client = new TcpClient(serverIP, port);
Только вызывающий поток имеет доступ к этому экземпляру, так что это не проблема.
Проблема в том, что вы предполагаете, что вы получите полный ответ
в одном чтении:
int bytesRead = nwStream.Read(bytesToRead, 0, client.ReceiveBufferSize);
От MSDN :
Общее количество байтов, считанных в буфер.Это может быть меньше количества запрошенных байтов, если такое количество байтов в данный момент недоступно, или ноль (0), если достигнут конец потока.
Требуется время, чтобы серверответить, и ответ
будет отправлен по сети.Когда вы вызываете Read
, весь ответ может быть или может быть недоступен, поэтому вам нужно читать в цикле, пока не будет достигнут конец потока.
var responseBuffer = new byte[client.ReceiveBufferSize];
var bytesRead = 0;
int read;
do
{
read = nwStream.Read(responseBuffer, 0, client.ReceiveBufferSize);
} while (read > 0)
Это предполагает, что сервер закрываетПравильно установить соединение после обработки запроса.
Если соединение остается открытым, вам придется использовать другой метод
, чтобы определить, что вы получили полный ответ на запрос.