Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
ulikus

winsock сам соединеняет пакеты при получении или отправлении. как этого избежать

17.07.2011, 02:12. Показов 2096. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
короче проблема в том что когда посылаешь несколько пакетов подряд то они содиняются в один.
тоесть:
1. ааа 2. ббб 3. ввв 4. ггг
а приходит
1. ааа 2. бббввв 3. ггг
ну понятно короче
есть ли в insock возможность что бы при получении пакета, получатель отправлял подтверждение и отлько после этого отсылался следущий пакет что бвы они негде не смешивались.
тут этот вопрос уже поднимался но ничего так так и не ответили
Заранее благодарю
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.07.2011, 02:12
Ответы с готовыми решениями:

При использовании read или readln строка ввода опускается все ниже-ниже. Как-то этого избежать?
При каждом использовании будь то read или readln строка ввода опускается все ниже-ниже, возможно как-то это избежать?

При любом действии сбрасываются переменные. Как этого избежать
У меня проблема небольшая. Пишу приложение ASP.net, при любой действии сбрасываются переменные. Как сделать так чтобы они не сбрасывались? ...

При нажатии стрелок фокус передаётся по компонентам на форме. Как этого избежать ?
Приветствую! Мне необходимо сделать так, чтобы при нажатии стрелок фокус не передавался другим компонентам. Как быть ? Пожалуйста,...

9
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
17.07.2011, 03:00
вопрос, если не ошибаюсь, я и поднимал.
Решение нашел, может и не самое лучшее, но все же...
В конце каждого пакета вставляешь такой символ, котоырй не может встречаться в пакете, и при получении разбиваешь (Split), по этому символу. Работает на ура.
0
ulikus
17.07.2011, 21:38
Привет!
Проблема заключается в том что split у меня и так уже исползуется так как пакеты содержат много информации то есть:
команда, данные, данные... и везде разные команды и количесво данных
сама программа карточная игра и эта проблема возникает только при раздаче карт когда клиенты посылается информация о картах несколько раз подряд из for loopа
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149
21.07.2011, 23:38
Предлогаю следующий вариант:

Winsock1.SendData 'abcdefg'
do until snd=True
doevents
loop
Winsock1.SendData 'zzzzzz'
End Sub

Winsock1_SendComplete()
snd=True
end sub
0
1 / 1 / 0
Регистрация: 22.04.2011
Сообщений: 47
26.07.2011, 00:48
Не знаю, как WinSocket Control - я его никода не применяю - работаю только через API. Так вот, если отправитель всегда ждет подтверждения получения пакета со стороны клиента в виде какого - либо ответного пакета, никакого 'склеивания' не происходит. Даже наоборот, иногда мои пакеты (когда их размеры превышают пару десятков килобайт) начинают дробиться. Но это не проблема, потому что первое слово в моем пакете всегда указывает длину пакета. В случае дробления принимающая сторона, просто вызывает recv столько раз, пока не прочтется указанное в первом слове пакета количество байт.
0
Jonis
16.08.2011, 07:26
Только что сам закончил писать небольшой sql server. Эту проблему решил так же, как было описано выше. Перед отправкой строки в начало добавляю длину строки (в результате отправляемая строка увеличивается скажем на 10 символов в которых и хранится длина всей строки). Теперь достаточно взять первые 10 симвлов, перевести их в число и сравнить с длиной. Если совпадает, то обрабатываю текст начиная с 11 символа, если нет, то обрезаю по заданной длине. В случае если пакеты слеплены в один, обрабатываю вначале целые пакеты, а не полный помещаю в буфер (в дополнительную переменную). При следующем приеме склеиваю текст из буфера с тем что пришло и т.д.
Если длина отправляемого текста свыше лимита для контрола WINSOCK, то текст режится на куске и отправляется кусками, при этом длина текста отправляется только в первом пакете.
В данном случае нет ограничений на отправляемые данные двоичные они или текстовые (в двоичных может попасться код конца строки). Вот и все.

Евгений
Jonis
16.08.2011, 07:49
Хочу добавить про API. Он тоже склеивает пакеты, в случае последовательной отправки нескольких пакетов одному и тому же клиенту во время ожидания ответа о получении предыдущего пакета (это какие-то доли секунд).
В связи с проблемой работы WinSock API на 98 винде и переодического его краха пришлось отказаться и перейти к готовому контролу. В результате связь с подключенными клиентами стала стабильной и клиенты перестали отрубаться по непонятным причинам.
Irokez
16.08.2011, 16:44
Простите что вмешиваюсь.
А что мешает два раза сделать сплит.
1 разделить пакеты
2 разделить комманды в каждом из них
Jonis
16.08.2011, 21:04
Почему использование сплит затрудняет работу при получении склеенных пакетов:
В случае отправки(получения) двоичных данных есть вероятность появления в строке данных набора символов соответствующих набору символов/символа являющихся разделителем. К примеру, если используете сжатие/кодирование данных, то после этой лперации данные будут представлены не только текстовыми символами.

Jonis
Messir
16.08.2011, 21:33
Размер буфера посылки выставлять равным размеру пакета
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.08.2011, 21:33
Помогаю со студенческими работами здесь

Как создать динамичный поддомен на Joomla, если сам действующий сайт статичен и избежать при этом дублей?
Добрый день! очень надеюсь на дельный совет от профессионалов -- имеется пятилетний сайт, статичен - старого образца на основе...

DbCtrlGrid: при скролле до конца автоматически создается новая пустая запись. Как этого избежать?
Уважаемые форумчане! Столкнулся с проблемой при работе с DBCtrlGrid: при скролле до конца автоматически создается новая пустая запись. как...

при вызове конструктора присваивания надо возвращать ссыль на объект или сам объект. Смысл? Значения нужных полей меняютмся и без этого!
Друзья! Обнаружил пробел в знаниях. Собсно, вопрос в теме. Дополню лишь: поля объекта меняются на нужные значения и безо всякого возврата...

Canvas или как сделать покраснение экрана при получении урона
Нашел урок по "как сделать покраснение экрана при получении урона". Но он основан на старой системе GUI. Создавался ГО с GUITexture и...

Рисование на виртуальной канве или как избежать мигания при рисовании
Суть проблемы в следующем: На канве рисуется очень большой и сложный чертеж, потому все изображение моргает, что крайне нежелательно....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru