powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему Socket клиент не получает данные полностью
1 сообщений из 1, страница 1 из 1
Почему Socket клиент не получает данные полностью
    #39042755
ratboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи, помогите, мучаюсь неделю. Есть код отправки команды и приема байтового массива в виде ответа:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 // отправка запроса
            var bytes = command.GetBytes();
            socket.Send(bytes, bytes.Length, 0);
            // приём ответа
          var buffer = new byte[1024];
          using (var stream = new MemoryStream())
          {
#warning Здесь ошибка, приводящая к обрезке данных если буфер меньше передаваемых данных при синхронной передаче
              do
              {
                  int receivedBytes = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);

                  stream.Write(buffer, 0, receivedBytes);
#warning Костыль для ошибки
                 Thread.Sleep(TimeSpan.FromMilliseconds(0.6));
              } while (socket.Available > 0);


С костылем принимает данные полностью, без него рубит ответ с сервера. Асинхронный Socket работает отлично. Все отсылает и принимает. Я его и использую. Но синхронный никак.
Я пробовал читать два раза. Сначала заголовок ответа, где есть общее количество байт ответа, затем читать эти байты. Тоже самое, второй раз просто не читает, а ждет чего-то. Вот второй кусок кода:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
              //принимаем заголовок
              var headerBuffer = new byte[SctpProtocol.HeaderLength];
              int receivedBytes = socket.Receive(headerBuffer, 0, headerBuffer.Length, SocketFlags.None);
              int i = socket.Available;
              stream.Write(headerBuffer, 0, receivedBytes);
              //читаем заголовок
              ResponseHeader header = new ResponseHeader(headerBuffer);
              //принимаем остальное
              if (header.ReturnCode == ReturnCode.Successfull)
              {
                  var BodyBuffer = new byte[header.ReturnSize];

                  int offset = 0; // Сдвиг для массива с получаемым файлом
                  int bytesCount = 0; // Количество байт прочитанных из сокета
                  do
                  {
                      // Читаем сколько-то байт из сокета
                      bytesCount = socket.Receive(BodyBuffer);
                      // Копируем полученные байты в конец массива с файлом
                      stream.Write(BodyBuffer, offset, bytesCount);
                      // Сдвигаем конец массива
                      offset += bytesCount;
                  }
                  while (offset < header.ReturnSize);


В чем загвоздка?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему Socket клиент не получает данные полностью
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]