|
0 / 0 / 0
Регистрация: 02.07.2016
Сообщений: 15
|
||||||||||||||||
Баг с ReceiveText (Связка компонентов ServerSocket-ClientSocket)31.05.2017, 16:05. Показов 1519. Ответов 6
Пишу клиент-серверное приложение. В серверном варианте присутствует простенький мониторинг подключенных пользователей. Реализовано следующим образом: как только пользователь подключается, то через GetComputerName он отправляет имя компа. Проблема в том, что иногда приходит пустая строка. Причем функция работает нормально, строка записывается и отправляется. Но что-то происходит в процессе передаче, что никак не могу отловить. Может это баг какой-то, а может и нет. Мне просто нужно толковое объяснение тех, кто уже сталкивался с подобным. Можно ли как-то обойти эту проблему. Работе не мешает, конечно, но все равно напрягает.
Ниже код (в комментариях сбита кодировка): Переменные
0
|
||||||||||||||||
| 31.05.2017, 16:05 | |
|
Ответы с готовыми решениями:
6
ServerSocket и ClientSocket ServerSocket and ClientSocket ServerSocket и ClientSocket |
|
|
|
| 31.05.2017, 16:29 | |
|
Доброго.
При работаете с обычными сокетами необходимо отказываться от передачи строки через сеть...это очень не надежный формат передачи данных с множеством подводных камней. Переводите свой текст в байты и их отправляйте. Второе. Просто байты ни когда не шлются. Нужно слать размер байтов, что бы принимающая сторона точно знала какую длину пакета ожидать. PS. Во время передачи, данные дробятся и порой доходят в несколько этапов. Это может менее заметно если вы тестируете локально. Но как только начнете работать через сеть, все это всплывет. Добавлено через 2 минуты В обычных сокетах, луче отказаться от получения строки через ServerSocket1ClientConnec....используйте Read
0
|
|
|
0 / 0 / 0
Регистрация: 02.07.2016
Сообщений: 15
|
||||||
| 31.05.2017, 16:55 [ТС] | ||||||
|
Насчет Read. Здесь идет считывание структуры. Я не придумал как научить сервер отличать структуру от обычного текста. Поэтому сделал через Connect
0
|
||||||
|
|
|
| 31.05.2017, 17:01 | |
|
Я как то разбирал исходник сокета, давно было , помню что вроде при конекте он не ждет остатки пакета,что не пришли сразу.
Так что луче когда отправляете от клиента пакет, с начало определяйте его назначение.
1
|
|
|
0 / 0 / 0
Регистрация: 02.07.2016
Сообщений: 15
|
|
| 31.05.2017, 17:07 [ТС] | |
|
А есть идеи, как определить назначение? У меня есть вариант двойной отправки. Сначала отправляется "системное" сообщение, где определяется назначение, а потом принимается второй поток данных: либо строка, либо структура. Такое может сработать?
0
|
|
|
|
|
| 31.05.2017, 17:12 | |
Сообщение было отмечено gogosolo как решение
Решение
Может, только когда Вы споткнетесь на то что вам с начало надо отправлять размер пакета, а потом тип пакета, а потом сам пакет....в общем это надо думать в зависимости от задуманного.
Простой вариант,в структуру добавьте еще один параметр, Тип ПАКЕТА.
1
|
|
|
0 / 0 / 0
Регистрация: 02.07.2016
Сообщений: 15
|
|
| 31.05.2017, 21:02 [ТС] | |
|
Попробовал идею с дополнительным параметром в структуре. Естесственно отделил, когда приходит имя компа, когда сообщение. Протестировал запуск сервера 10+ раз (обычно 2-3 раза пустую строку получал), теперь отображается как надо. Спасибо за помощь.
0
|
|
| 31.05.2017, 21:02 | |
|
Помогаю со студенческими работами здесь
7
ClientSocket и ServerSocket ClientSocket ServerSocket Вопрос Проблемы с clientsocket и serversocket ServerSocket & ClientSocket Звук ClientSocket u ServerSocket Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|