Аватар для calculon
14 / 14 / 2
Регистрация: 18.07.2012
Сообщений: 79

Обмен Xml пакетами по TCP

25.07.2012, 09:28. Показов 2334. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. Есть задача: реализовать обмен Xml пакетами через Tcp между двумя точками в двух направлениях со 100% гарантией доставки. Перерыл кучу материала по теме и если я правильно понял, то само по себе Tcp соединение напоминает com порт куда просто валятся данные, то есть оно гарантирует что они придут в нужном порядке и все правильно, но склеиваются как попало. Это значит что может быть ситуация когда конец одного и начало другого Xml пакета слипнуться. Чтобы этого избежать я пока решил ввести заголовки, где будет проставляться сигнатура начала и размер нагрузки...но это означает что надо постоянно шерстить входящий поток...может кто то подскажет более изящное решение проблемы?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.07.2012, 09:28
Ответы с готовыми решениями:

TCP работа с пакетами
Всем привет! Есть сервер игрушки. Клиент коннектится к порту 27780, там все и происходит. Задача: Надо сделать чтение(не знаю как...

TCP работа с пакетами
Всем привет! Есть сервер игрушки. Клиент коннектится к порту 27780, там все и происходит. Задача: Надо сделать чтение(не знаю как...

Межпроцессный обмен пакетами данных
Собственно вопрос. Как отправить пакет в приложение? Опять же онлайн игра. Нужна пакетная отправка скилов ( умений персонажа ) Прошу...

6
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
25.07.2012, 10:11
Его нет :-)
Все совершенно правильно, TCP гарантирует доставку данных (либо получение ошибки "разрыв соединения"), но - является протоколом потоковой передачи данных и ничего не "знает" и не должен знать о твоих "Xml пакетах". За обработку полезной нагрузки отвечает вышележащий над TCP логический протокол обмена, который ты разрабатываешь самостоятельно.
1
Модератор
 Аватар для vxg
3404 / 2175 / 353
Регистрация: 13.01.2012
Сообщений: 8,436
25.07.2012, 10:44
можно рвать соединение после каждой загрузки давая понять что она состоялась, но это - адово решение которое я однажды видел и даже в этом участвовал)
0
 Аватар для calculon
14 / 14 / 2
Регистрация: 18.07.2012
Сообщений: 79
25.07.2012, 11:27  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
можно рвать соединение после каждой загрузки давая понять что она состоялась, но это - адово решение которое я однажды видел и даже в этом участвовал)
Я пока остановился на варианте подобном XMPP...просто ставлю теги <packet><нагрузка></packet>....на приеме ищу первый...потом второй...читаю все что между и разбираю...ничего более подходящего пока в голову не пришло..
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
25.07.2012, 11:28
Мне представляется, что при таком методе засада будет в том, чтобы надежно и стопроцентно отделить разрывы соединения по завершении "пакета" от разрывов соединения по любым другим причинам, коих может быть миллион. Если это не получится, то рано или поздно станут приходить битые "пакеты". А обработка битых "пакетов" - это отдельная головная боль.....
0
Модератор
 Аватар для vxg
3404 / 2175 / 353
Регистрация: 13.01.2012
Сообщений: 8,436
25.07.2012, 11:55
Цитата Сообщение от CheshireCat Посмотреть сообщение
отделить разрывы соединения по завершении "пакета" от разрывов соединения по любым другим причинам
если это нормальный XML, то целостность может быть определена по закрытию самой верхней секции </бла бла бла>. это кстати можно использовать и для отделения одного сообщения от другого. другое дело если это ненормальный XML где секции просто валятся друг за другом... тогда нужно сделать его нормальным как и поступил автор
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
25.07.2012, 12:20
Цитата Сообщение от vxg Посмотреть сообщение
если это нормальный XML, то целостность может быть определена по закрытию самой верхней секции </бла бла бла>. это кстати можно использовать и для отделения одного сообщения от другого.
:-)
Вот это и есть как раз тот самый "логический протокол обмена поверх TCP".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2012, 12:20
Помогаю со студенческими работами здесь

Обмен пакетами данных между пунктами A и B (unspecified)
В системе передачи данных осуществляется обмен пакетами данных между пунктами А и В по дуплексному каналу связи. Пакеты поступают в пункты...

Обмен файлами по TCP
Есть рабочий клиент на андроид. 4 кнопки. 1.Установить соединение 2.Обмен данными. 3.Сохранить файлы 4.Закрыть соединение. ...

MODBUS-TCP обмен данными
Моё простенькое чудо-приложение должно принимать/посылать данные от/на внешнее устройство. Внешнее устройство - ПЛК Овен, который...

Сгруппированный обмен сообщениями по TCP
Добрый день! Существует такие маленькие клиент-серверные приложения. Сервер: Dim port As Int32 = 10000 Dim serverSocket As...

Tcp Сервер - Клиент обмен данными
Ситуация такая: есть Tcp клиент и сервер для xna игры. Реализован обмен объектами, которые содержатся в единой библиотеке. Объекты...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru