Сокеты, выход за границы массива?

145
27 февраля 2018, 02:36

Люди добрые, осваиваю сокеты на c#, и увидел товарища на ютюбе, который объясняет как это делать. Вообщем, когда он принимает сообщение от клиента(простая строка) он инициализирует массива байтов с числом элементов 1024. и не узнавая размера прилетевшего сообщения, выводит его. Когда я это делал, кроме сообщения получал мусор в количестве соответствующему количеству элементов в массиве байтов. Вопрос, я то-то делаю не так, или он где то недопоказал код? При этом, когда я присваиваю длину при получении сообщения

int lng = socket.Receive(data);

И задаю на вывод, переполнение мусором нету, выводится без лишних символов.

Answer 1

Массив, который вы передаете в метод Receive - это просто выделенное место для записи в него данных. Реально там данных окажется столько, сколько удалось прочитать. Вам необходимо самостоятельно отслеживать сколько их у вас есть - это общий принцип работы с любыми потоками данных, не только с сокетами.

PS Вы зря называете вашу lng длиной сообщения. Потому что протокол TCP не передает сообщения, он передает сплошной поток данных! При передаче ваши сообщения могут запросто побиться на несколько или склеиться в одно.

READ ALSO
LINQ to XML: парсинг xml с отсутствующими тегами

LINQ to XML: парсинг xml с отсутствующими тегами

Есть некий xmlВ целом его структура "постоянна", но есть узлы, в которых нет части тегов, которые необходимо считать

168
C# double. Округление

C# double. Округление

если число меньше какого то значения "00000002", то C# превращает его в 2e-07

222
SQLite.Interop.dll. Не удается загрузить

SQLite.Interop.dll. Не удается загрузить

Доброе утроУ меня вопрос

228
Как реализовать Generating path в Unity?

Как реализовать Generating path в Unity?

Нужно реализовать генерацию пути с развилкой (то что нужно мне указано на изображении)

174