Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
тыжПрограммист
 Аватар для LonerZzz
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638

Метод Socket.Receive(Byte[], Int32, Int32, SocketFlags) отрабатывает некорректно

20.05.2015, 20:14. Показов 3541. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу передачу файлов с помощью TCP сокетов. Когда казалось уже всё готово..при тестирование в настоящей локальной сети возникли проблемы.

Используя метод
C#
1
BytesRecive = Handler.Receive(Message,4096,SocketFlags.None);
и читая MSDN
Получает указанное число байтов данных из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.

Что я вижу на практике.


1 колонка..общее количество принятых байт..2 колонка..общий размер файла..3 колонка количество принятых байт на текущей итерации.. 4 колонка количество байт, которые должно было принять.

Возникает вопрос..почему количество принятых байт на текущей итерации отличается от того что нужно было принять..это я накосячил..ну может какие флаги нужно ещё добавлять или ещё что...или это ненормально?

Просто судя по моей логике..метод RECIVE должен был получать данные до тех пор пока не примет все 4096 байта
Поэтому я не могу собрать нормально файл..постоянно добавляет лишние байты к файлу..а при работе с RAR архивами..это очень критично..в итоге получаю битые архивы.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2015, 20:14
Ответы с готовыми решениями:

Метод Graphics.DrawLine(Int32, Int32, Int32, Int32) Узнать координаты всех точек данной прямой
Как я могу получить координаты всех точек, создаваемых данных методом? Мне необходимо это в дальнейшем чтобы посчитать количество...

Чтение int32 из массива типа Byte
На борту имеем массив и парочку переменных: var data:array of byte; i:integer; d:int32; В ячейках data записано...

Int 64 vs int32
Столкнулся с такой проблемкой. Есть процедурка которая принимает два аргумента типа integer(int32). пытаюсь передать такой аргумент ...

4
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
20.05.2015, 20:41
Лучший ответ Сообщение было отмечено LonerZzz как решение

Решение

Цитата Сообщение от LonerZzz Посмотреть сообщение
Просто судя по моей логике..метод RECIVE должен был получать данные до тех пор пока не примет все 4096 байта
Вовсе нет. RECEIVE во всех нормальных реализациях TCP возвращает
некоторое количество байт, которое может быть меньше размера
принимающего буфера. Вот информация из MSDN:

Socket.Receive Method (Byte[], Int32, Int32, SocketFlags)
https://msdn.microsoft.com/ru-... 10%29.aspx

The Receive method reads data into the buffer parameter and returns the number of
bytes successfully read
. You can call Receive from both connection-oriented and connectionless sockets.

...


If you are using a connection-oriented Socket, the Receive method will read as
much data as is available, up to the number of bytes specified by the size parameter.

If the remote host shuts down the Socket connection with the Shutdown method, and all
available data has been received, the Receive method will complete immediately and
return zero bytes.
1
тыжПрограммист
 Аватар для LonerZzz
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
20.05.2015, 20:49  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
некоторое количество байт, которое может быть меньше размера
Который раз вы меня выручаете..Спасибо. Уже переписал методы получения данных..с учётом этого
некоторое количество байт, которое может быть меньше размера
.

Как только сдам работу. Выкину сюда все свои труды и примеры кода..При передаче больших объёмов данных через TCP сокет.
1
0 / 0 / 0
Регистрация: 03.04.2011
Сообщений: 49
10.06.2015, 01:02
LonerZzz, ну как успехи? Очень интересно увидеть примеры кода
0
тыжПрограммист
 Аватар для LonerZzz
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
14.06.2015, 22:26  [ТС]
Цитата Сообщение от DjTurxan Посмотреть сообщение
LonerZzz, ну как успехи? Очень интересно увидеть примеры кода
Успехи на отлично, курсовую защитил..как найду время сразу отпишу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2015, 22:26
Помогаю со студенческими работами здесь

utf-8 <-> int32
Есть строка s формата utf-8 длины l и число n типа int32 или uint32, которое является уникальным идентификатором строки s. Какие...

Преобразование hex в int32
Привет всем! Написал функцию по расчету hex to int. Но она не правильно считает отрицательные значения, т.к. нужно получать int32. ...

Отличие Int от Int32
Ребят, в чем отличие просто когда мы пишем: Int a; От: System. Int32 a; И что такое Int32? И зачем она вообще нужна?

Отличие Uint32 от Int32
Господа, понимающие. Объясните, пожалуйста в чём отличие? Рихтер говорит int32 это числовой тип со знаком, а uint32 без знака. О...

Тип данных System.Int32
Добрый день. Пытаюсь разобраться с типами данных (для примера выбрала System.Int32). На referencesousre показано как реализован...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru