@ondister

Почему обрезаются данные при приеме через socket c#?

Есть вполне работоспособный код синхронной отсылки и приема данных
// отправка запроса
            var bytes = command.GetBytes();
            socket.Send(bytes, bytes.Length, 0);
            // приём ответа
            var buffer = new byte[1024];
            using (var stream = new MemoryStream())
            {
                do
                {
                    int receivedBytes = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
                    stream.Write(buffer, 0, receivedBytes);
                } while (socket.Available > 0);
                return Response.GetResponse(stream.ToArray());
            }

Все хорошо работает, пока размер принимаемых данных не превышает размер буфера. После этого в некоторых случаях (в 80 процентов) происходит обрезка принимаемых данных на произвольную величину. Помогает вставка Thread.Sleep(1) после stream.Write(buffer, 0, receivedBytes);, но это не выход. К сожалению, сам не нашел решение, поэтому спрашиваю у общества. Помогите добрым советом, пожалуйста...
  • Вопрос задан
  • 582 просмотра
Пригласить эксперта
Ответы на вопрос 2
DmitryITWorksMakarov
@DmitryITWorksMakarov
Возможно, стоит сделать так:
do
                {
                    int receivedBytes = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
                    stream.Write(buffer, 0, receivedBytes);
                } while (receivedBytes > 0);


На свойство Available надо внимательно посмотреть. В msdn в заметках его особенности поведения указаны. Возможно, в них дело.
Ответ написан
Комментировать
@ondister Автор вопроса
Этот код не работает. Ответ вообще не принимается.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы