|
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
|
|||||||||||
.NET 3.x Сокеты. Непонятные сообщения и странные выводы05.07.2021, 21:20. Показов 3190. Ответов 15
Метки нет (Все метки)
Здравствуйте!
У меня есть некий удалённый сервер с таким кодом:
Но по выводу сервера получается чушь. Сообщения смешиваются, данные куда-то пропадают, и появляются. Хотя клиентом было выслано только одно сообщение. Что происходит? В чём проблема? Заранее спасибо!
0
|
|||||||||||
| 05.07.2021, 21:20 | |
|
Ответы с готовыми решениями:
15
Странные выводы касательно света сокеты непонятные моменты Странные непонятные названия в библиотеке JSoup |
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
|
||||||
| 06.07.2021, 00:53 | ||||||
Сообщение было отмечено Hyppoprogramm как решение
Решение
Hyppoprogramm, на это без слёз смотреть сложно. Ужасная каша. Но проблема тут типовая: отсутствие понимания того, что данные по сети передаются более мелкими фрагментами, нежели вы их отправляете. Соотвественно, вы это в коде никак не учитываете. Вот и получаете что попало. Ну и под отладкой вы видимо своё приложение не рассматривали, иначе бы это сразу увидели.
Простой пример:
Ваши сообщения должны иметь чётко определённые границы. Ваш код, который принимает сообщения, должен проверять, опираясь на эти границы, что сообщение пришло полностью, прежде чем дальше по условиям его прогонять. Это что касаемо самого вопроса с корректностью. Другой момент, что в глаза бросается, это ужасная неэффективность передачи данных. У вас на каждое сообщение буферы и строки аллоцируются. А между тем, у вас тут явно игра. Создавая кучи мусора на каждом передаваемом фрейме вы будете забивать кучу на клиенте и на сервере (что хуже), с периодическими фризами на сборку этого мусора силами GC. Разработка игрового сервера потребует от вас большего понимания языка и платформы, чем вы на данный момент обладаете. Лучше сначала почитайте литературу по этому вопросу. Например это: «Multiplayer Game Programming: Architecting Networked Games (Game Design)». И научитесь пользоваться отладчиком. Без этого навыка не то, что игры сетевые, а даже консольные утилитки не написать. Или вы собираетесь по каждому чиху на форум бежать?)
2
|
||||||
|
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
|
|
| 06.07.2021, 08:55 [ТС] | |
|
Usaga, если я буду в начале и в конце сообщения отправлять особый байт-"разделитель", то какой лучш6е использовать, чтобы он не встречался нигде в сообщении?
0
|
|
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
|
|
| 06.07.2021, 08:59 | |
|
Hyppoprogramm, самый простой способ: отправлять в начале сообщения его размер в байтах. Соответственно, принимающая сторона будет знать сколько байт в буфер нужно "набить" прежде, чем процессить сообщение. Отправитель же всегда знает сколько байт он отправляет.
1
|
|
|
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
|
|
| 06.07.2021, 09:00 [ТС] | |
|
Usaga, огромное вам спасибо!
0
|
|
|
Строитель
|
|||||||||||
| 06.07.2021, 09:08 | |||||||||||
|
Hyppoprogramm, создайте сетевой поток NetworkStream и подключите его к BinaryReader и BinaryWriter.
1
|
|||||||||||
|
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
|
||||||||||||||||
| 06.07.2021, 10:03 [ТС] | ||||||||||||||||
|
Usaga, изменил код сервера:
0
|
||||||||||||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
|
||||||
| 06.07.2021, 10:14 | ||||||
Сообщение было отмечено Hyppoprogramm как решение
Решение
А вообще по прежнему жуткий говнокод. Сделайте лучше как выше предложили с использованием BinaryReader/BinaryWriter и тогда все эти ваши буферы, битконвертеры и т.д. будут не нужны...
1
|
||||||
|
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
|
|
| 06.07.2021, 10:15 [ТС] | |
|
Someone007, спасибо, накопировал и не заметил. На BinaryReader/BinaryWriter переписывать не хочу - долго. Знаю, что сглупил.
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
|
|
| 06.07.2021, 10:18 | |
|
1
|
|
|
|
|||
| 06.07.2021, 10:24 | |||
|
Не по теме:
0
|
|||
|
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
|
||||||
| 06.07.2021, 18:19 [ТС] | ||||||
|
Someone007, теперь выдаёт ошибку
(Сервер, 137 строка) Добавлено через 1 час 0 минут Someone007, честно говоря понимаю, что морок меньше будет с BinaryWriter/BinaryReader, но не понимаю, как это использовать в моём коде. Подскажите, пожалуйста. Или посоветуйте ресурс.
0
|
||||||
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
|
| 06.07.2021, 22:12 | |
|
Hyppoprogramm, лучше всего использовать готовую библиотеку, например signalR.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 07.07.2021, 01:58 | |
|
gRPC тоже хороша
0
|
|
|
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
|
|
| 07.07.2021, 09:27 [ТС] | |
|
Рядовой, kolorotur, BinaryWriter/BinaryReader думаю подойдёт больше.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 07.07.2021, 09:40 | |
|
Hyppoprogramm, BinaryReader/Writer подходит для чтения/записи простых типов или "сырых" данных в виде массивов байт, а код автора уж больно похож на попытку реализовать обмен сообщениями в реальном времени, т.е. на уровень выше.
Для обмена сообщениями есть отлично зарекомендовавшие себя в реальных проектах решения.
0
|
|
| 07.07.2021, 09:40 | |
|
Помогаю со студенческими работами здесь
16
Сервер выдаёт непонятные сообщения Сокеты. Вывести отправляемые и принимаемые сообщения Сокеты, ошибка при отправлении сообщения Передача сообщения от клиента к серверу, сокеты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|