TCP или UDP28.08.2011, 18:09. Показов 3777. Ответов 8
Метки нет (Все метки)
что лучше использовать для создания игры по сетке в реальном времени, использую билдер, хотелось бы узнать каким компонентом пользоваться????
0
|
|
| 28.08.2011, 18:09 | |
|
Ответы с готовыми решениями:
8
UDP - узнать имя или Индекс клиента C++ Builder и TCP IP или обновить версию Билдера
|
|
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
|
|
| 28.08.2011, 18:42 | |
|
я думаю для тебя разница будет заметна только парой лишних строк кода - так что без разницы.
а вообще думаю с TCP будет полегче
0
|
|
|
117 / 114 / 10
Регистрация: 02.06.2011
Сообщений: 280
|
|
| 28.08.2011, 22:59 | |
|
та так же - ограничение по пропускной способности а не протоколу. у TCP вроде пинг чуть больше и системной инфы тож чуть побольше - но зато удобней(как по мне). TCP предполагает архитектуру клиент-сервер а это:
1) удобство(очень заметно если игроков больше чем 2) 2) безопасность(все проверки на стороне серва к которому пользователи(игроки) не имеют доступа. ну а про пинг - не думаю что у тебя на руках супер 3D-шутер ожидаюший сетевого режима
0
|
|
|
Почетный модератор
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
|
|
|
|
|
| 29.08.2011, 08:27 | |
|
Matrica, Я не знаю конечно чего ты там с TCP наделал, и как у тебя могло это тормозить.
Я делал сетевое приложение база данных клиент-сервер трехзвенка, тестирование на скорость проходило через сеть hamachi где скорость была кбит 100, а то и меньше, как у диалапа, и данные у меня грузились быстрее чем ты их в ComboBox загрузишь!!
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. |
|
| 28.06.2012, 05:23 | |
|
Помогаю со студенческими работами здесь
9
TCP/IP пакеты. Как можно изменить служебные параметры заголовка TCP или UDP? Проброс TCP или UDP через RDP сеанс Пример кода для обмена сообщениями на протоколе UDP или TCP Примеры по реализации голосового обмена на Java 2 с использованием протоколов TCP/IP или UDP UDP и TCP Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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(), которая. . .
|