Люди добрые, осваиваю сокеты на c#, и увидел товарища на ютюбе, который объясняет как это делать. Вообщем, когда он принимает сообщение от клиента(простая строка) он инициализирует массива байтов с числом элементов 1024. и не узнавая размера прилетевшего сообщения, выводит его. Когда я это делал, кроме сообщения получал мусор в количестве соответствующему количеству элементов в массиве байтов. Вопрос, я то-то делаю не так, или он где то недопоказал код? При этом, когда я присваиваю длину при получении сообщения
int lng = socket.Receive(data);
И задаю на вывод, переполнение мусором нету, выводится без лишних символов.
Массив, который вы передаете в метод Receive - это просто выделенное место для записи в него данных. Реально там данных окажется столько, сколько удалось прочитать. Вам необходимо самостоятельно отслеживать сколько их у вас есть - это общий принцип работы с любыми потоками данных, не только с сокетами.
PS Вы зря называете вашу lng длиной сообщения. Потому что протокол TCP не передает сообщения, он передает сплошной поток данных! При передаче ваши сообщения могут запросто побиться на несколько или склеиться в одно.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости