Добрый день!
Есть API которая через сокеты отдает JSON. Проблема в том, что при больших ответах TcpClient не всегда успевает принять все данные. Подскажите, пожалуйста, как решить данную проблему.
Принимаю таким образом. Thread.Sleep() частично решает проблему, но во-первых не всегда, а во-вторых сильно тормозит другие более легкие запросы.
using (var client = new TcpClient(_settings.Host, _settings.Port))
{
using (var ns = client.GetStream())
{
using (var ms = new MemoryStream())
{
await ns.WriteAsync(requestData, 0, requestData.Length);
do
{
byte[] responseData = new byte[client.ReceiveBufferSize];
int recivedBytes = await ns.ReadAsync(responseData, 0, responseData.Length);
await ms.WriteAsync(responseData, 0, recivedBytes);
Thread.Sleep(400);
} while (client.Available > 0);
var response = ms.ToArray();
var result = Encoding.UTF8.GetString(response);
return ParseResponse(result);
}
}
}