Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
294 / 200 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1

TCP или UDP

28.08.2011, 18:09. Показов 3777. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
что лучше использовать для создания игры по сетке в реальном времени, использую билдер, хотелось бы узнать каким компонентом пользоваться????
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.08.2011, 18:09
Ответы с готовыми решениями:

UDP - узнать имя или Индекс клиента
Как узнать имя или Индекс клиента который подключился к Серверу UDP???? чтобы потом ему отправить сообщение

C++ Builder и TCP IP или обновить версию Билдера
Необходимо считывать данные с контроллера по протоколу TCP IP порт 502. В С++Builder6 установил Indy v 10.6.2.0 Раньше данные с...

Баг asio? или баг TCP стека?
всем привет. повстречался с очень странным багом. и не могу определить кто бажит, asio, или TCP-стек. на стороне клиента,...

8
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
28.08.2011, 18:42
я думаю для тебя разница будет заметна только парой лишних строк кода - так что без разницы.
а вообще думаю с TCP будет полегче
0
294 / 200 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
28.08.2011, 20:01  [ТС]
Говорят в TCP скорость передачи слабая, чем у UDP
0
 Аватар для SalterOk
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
28.08.2011, 22:59
та так же - ограничение по пропускной способности а не протоколу. у TCP вроде пинг чуть больше и системной инфы тож чуть побольше - но зато удобней(как по мне). TCP предполагает архитектуру клиент-сервер а это:
1) удобство(очень заметно если игроков больше чем 2)
2) безопасность(все проверки на стороне серва к которому пользователи(игроки) не имеют доступа.
ну а про пинг - не думаю что у тебя на руках супер 3D-шутер ожидаюший сетевого режима
0
Почетный модератор
 Аватар для Humanoid
11556 / 4351 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
28.08.2011, 23:08
Всё зависит от задач.
TCP требует установить соединение. Какие данные были отправлены - те и придут к адресату. И придут именно в том порядке, в котором были отправлены. Данные идут потоком... т.е., если ты отправляешь несколько маленьких кусков, то они имеют право придти к адресату в виде одного большого куска. Или наоборот - разделиться на более мелкие. Но именно в том порядке, в котором были отправлены.

UDP отправляет сообщения. Предварительная установка соединения не требуется. Сообщение может потеряться или более позднее может придти раньше, чем более раннее. Но они не могут склеиваться или разрываться. Если были отправлены 3 датаграммы по 1 байту, значит они в таком же виде и придут (но как я уже сказал - некоторые могут просто потеряться или первое может придти после второго).
1
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
29.08.2011, 06:45
Я пытался написать сет.игру с использованием TCP, но так как не стал про него ничего читать мне хватало знаний, я начал сразу. Вот подводные камни:
При быстрой отправке буфера например такого рода:
------
10;15
20
------
предположим новые координаты объекта с ID-20
При доставления этого на сервер они могут запросто слиться во что-то такое:
------
2010;15
20
------
Буфер TCP перед получением никак вручную почистить нельзя...он должен делать это автоматом.
Вот так он слипляет из-за ограничения на размер (помойму, точно не помню) буфера.
Да и медленный он очень...даже когда мне удалось еле еле как побороть эту проблему
То "танчик" удалённый соперника, двигался рывками и тормозил, при этом скорость лок.сети 100мб\с

После токого провала где-то через месяц ЗА ДЕНЬ! освоил UDP (компонент nmUDP кажется) и написал довольно-таки прикольную и !оочень много передающею, но не тормозящею игру.!

Мой совет: учи UDP, на нём потом и всякие RAdmin'ы писать сможешь и etc...
Удачи, во всех твоих начинаниях!!!

PS. Некоторые говорят (ну эт реально бывает ХД) что данные могут при передаче потеряться...да, такое бывает, и это достаточно проблемно при 1 создании "коннекта", а дальше тебе уже не важно дойдут ли новые координаты, так как даже если 1 пакет не дойдёт, дойдёт следующий ХД
1
 Аватар для pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
29.08.2011, 08:27
Matrica, Я не знаю конечно чего ты там с TCP наделал, и как у тебя могло это тормозить.
Я делал сетевое приложение база данных клиент-сервер трехзвенка, тестирование на скорость проходило через сеть hamachi где скорость была кбит 100, а то и меньше, как у диалапа, и данные у меня грузились быстрее чем ты их в ComboBox загрузишь!!
0
294 / 200 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
29.08.2011, 09:52  [ТС]
Matrica то что нужно,Всем Спасибо!
0
Kipter
28.06.2012, 05:23
Приношу глубочайшие извинения за то что воскресил старый топик, но связано это с тем что он попадает в качестве 1-го результата поиска в гугле по запросу: C++ TCP пропускная способность.

Но при этом содержит не самую лучшую информацию.

Передача данных по протоколу TCP/IP на сегодняшний день имеет очень приличную производительность в сочетании с надежностью. Но требует очень хорошего и глубокого изучения для эффективного использования. В связи с чем предлагаю вам почитать книгу: “Эффективное программирование TCP/IP” (Йон Снейдер).

Если у вас нет времени или возможности в этом глубоко разбираться, лучше возьмите и используйте готовый протокол прикладного уровня (над TCP / UDP) для решения ваших задач. Даже для игр уже существуют подобные протоколы, берущие все заботы по производительности на себя.

Пользователь форума Matrica своим наблюдением продемонстрировал очень неумелую работу с данным протоколом достигнув подобного результата. И судя по сообщению на момент написания своего поста он совершенно не понимал разницу между дейтаграмма протоколом и потоковым протоколом. Да в UDP отправляются сообщения, максимальная длинна которых ограничена по размеру.

TCP же это “труба” в нее вы отправляете данные на одном конце и получаете на другом, при этом данные отправленные скопом могут придти разбитыми на несколько порций, так и данные отправленные разбитыми могут придти скопом. Вам необходимо самим разбивать льющийся поток на сообщения. К примеру вы можете использовать “символ-разделитель” или перед каждым сообщением указывать длину его тела.

Передача данных по TCP/IP действительно может иметь более высокие задержки и некоторую избыточность в трафике (уменьшая пропускную способность канала) за счет своих механизмов гарантированной доставки данных в строгой последовательности их отправления. Но чаще всего это совершенно несущественно, и UDP не дает сильного выигрыша.

Но при неумелом обращении с UDP/IP можно натворить дел еще больше, полностью убив пропускную способность канала слишком маленькими и частыми сегментами данных (каждая дейтаграмма имеет заголовки (с учетом IP не менее 24 байт) и чем меньше полезной информации тем больше паразитного трафика уменьшающего пропускную способность). При этом UDP/IP не гарантирует доставку сообщений, получения одного сообщения - один раз и более того не гарантирует их последовательность. Поэтому в случае с примером игры “танчики”, эти самые танчики иногда могут самопроизвольно “телепортироваться” при получении сервером более раннего сообщения. Вам придется самим создавать механизм отброса задержавшихся и дублирующихся сообщений.

И так, если по теме: TCP или UDP?
И я могу сказать: Порой, для игр, и то и другое одновременно, в два соединения.

Если данные которые вы хотите передавать между клиентом и сервером крайне важны и без их гарантированного получения в правильной последовательности и в единичном экземпляре ваше приложение может давать сбои - используйте TCP/IP он очень даже производителен (MMORPG игры не жалуются). Если это игра то такими данными могут быть: Применение каких либо способностей, торговые операции, использование предметов или окружения мира. Не следует пытаться изобрести на базе UDP свой надежный протокол гарантированной, последовательной доставки - вряд ли ваши алгоритмы переплюнут те что находятся в ядрах операционных систем.

Если данные которые вы хотите передавать между клиентом и сервером крайне быстро становятся неактуальны с течением очень короткого времени (менее полу-секунды) и их потеря если они пришли не во время совершенно не трагична (все равно уже устарели) то вам следует выбрать протокол UDP. Но при этом следует очень разумно его использовать. Не следует слать крохотные данные избыточно часто (будто для надежности), шлите с такой периодичностью которой достаточно для вашей бизнес-логики.
Если это игра, то чаще всего по UDP передают векторное перемещение игрока (управление WASD / Стрелочки), для перемещения кликами мышки можно и TCP. Однако нет смысла слать перемещение игрока с максимальной плотностью, гораздо лучше слать вектор направления движения и временной штамп с периодичностью не чаще чем половина игрового цикла движка на сервере (Какой смысл принимать серверу в ходе своего цикла 20 сообщений о перемещениях игрока, если он обработает только самый последний). UDP также уместен для передачи потокового звука и видео.

Но предупреждаю даже при передаче данных о перемещении игрока по UDP вас ждет очень много сложностей (порой не хилых алгоритмов) для обеспечения хорошей стабильности перемещения в условиях разного сорта интернета (особенно там где соединения не дуплексные, беспроводные, ADSL и т д) Поэтому если вы не гуру онлайн экшен игр и не пишите онлайн шутер или ММОРПГ, то лучше даже для перемещения игрока используйте TCP.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2012, 05:23
Помогаю со студенческими работами здесь

TCP/IP пакеты. Как можно изменить служебные параметры заголовка TCP или UDP?
Всем привет! Работаю с передачей данных через интернет. Как можно изменить служебные параметры заголовка TCP или UDP (флаги, контрольная...

Проброс TCP или UDP через RDP сеанс
Никак не могу найти в интернете простой ответ (все гуглится и яндексится с оветами как пробросить порт на роутере) Есть ли возможность...

Пример кода для обмена сообщениями на протоколе UDP или TCP
В HELPе DElphi приведены примеры использования winsock, но они почему-то на С++(?!?). У меня еще 2 вопроса: 1 Как отправлять...

Примеры по реализации голосового обмена на Java 2 с использованием протоколов TCP/IP или UDP
Подскажите, где можно найти примеры по реализации голосового обмена на Java 2 с использованием протоколов TCP/IP или UDP.

UDP и TCP
Здравствуйте! Хотел спросить: если допустим взять UDP и TCP протоколы, и при этом обезопасить UDP (решить проблему с...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru