Здравствуйте [опять :)]. каким именно сокетом пользоваться для создания онлайн игры? (UDP или TCP)
если TCP , то не будет ли тормозить? (т.к. ожидает ответа).
Если UDP лучше , то прощу приведите пример , как использовать (создание сервера,клиента и т.п)? (с ТСП у меня проблем нет, но UDP у меня чет не получается..) Спасибо...
Я думаю проще определиться какой готовый серверный продукт Вы будете использовать. Или Вы хотите всё писать сами с нуля? Ищем партнёров в РФ для реализации (продажи) и поддержки ПО
В рамках протокола TCP/IP для передачи данных используются протоколы – TCP и UDP. Многие наверняка слышали, что есть порты как TCP, так и UDP, но не все знают в чем разница и что это вообще. И так..
Передача данных по протоколу TCP (Transmission Control Protocol – Протокол Управления Передачей) предусматривает наличие подтверждений получения информации. “-Ну, мол, – получил? -Получил!” Если же передающая сторона не получит в установленные сроки необходимого подтверждения, то данные будут переданы повторно. Поэтому протокол TCP относят к протоколам, предусматривающим соединение, а UDP (User Datagram Protocol — Протокол Пользовательских Датаграмм) – нет. UPD применяется в тех случаях, когда не требуется подтверждения приема (например, DNS-запросы или IP-телефония (яркий представитель которой, – Skype) ). То есть разница заключается в наличии подтверждения приема. Казалось бы “Всего то!”, но на практике это играет важную роль.
Есть еще так же протокол ICMP (Internet Control Message Protocol — межсетевой протокол управляющих сообщений), который используется для передачи данных о параметрах сети. Он включает в себя служебные типы пакетов, таки как ping, distination unreachable, TTL и пр.
вот тебе ответ простым языком подробно если хотите на почту только ! TCP — это транспортный механизм, предоставляющий поток данных, с предварительной установкой соединения, за счёт этого дающий уверенность в достоверности получаемых данных, осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета (см. также T/TCP). В отличие от UDP, гарантирует, что приложение получит данные точно в такой же последовательности, в какой они были отправлены, и без потерь. Реализация TCP, как правило, встроена в ядро системы, хотя есть и реализации TCP в контексте приложения.Когда осуществляется передача от компьютера к компьютеру через Internet, TCP работает на верхнем уровне между двумя конечными системами, например, интернет-браузер и интернет-сервер. Также TCP осуществляет надежную передачу потока байт от одной программы на некотором компьютере в другую программу на другом компьютере. Программы для электронной почты и обмена файлами используют TCP. TCP контролирует длину сообщения, скорость обмена сообщениями, сетевой трафик.
UDP (англ. User Datagram Protocol — протокол пользовательских датаграмм) — это транспортный протокол для передачи данных в сетях IP без установления соединения. Он является одним из самых простых протоколов транспортного уровня модели OSI. Его IP-идентификатор — 0x11.
В отличие от TCP, UDP не гарантирует доставку пакета, поэтому аббревиатуру иногда расшифровывают как Unreliable Datagram Protocol (протокол ненадёжных датаграмм). Это позволяет ему гораздо быстрее и эффективнее доставлять данные для приложений, которым требуется большая пропускная способность линий связи, либо требуется малое время доставки данных.
TCP - ориентированный на соединение протокол, что означает необходимость "рукопожатия" для установки соединения между двумя хостами. Как только соединение установлено, пользователи могут отправлять данные в обоих направлениях.
Надежность - TCP управляет подтверждением, повторной передачей и тайм-аутом сообщений. Производятся многочисленные попытки доставить сообщение. Если оно потеряется на пути, сервер вновь запросит потерянную часть. В TCP нет ни пропавших данных, ни (в случае многочисленных тайм-аутов) разорванных соединений.
Упорядоченность - если два сообщения последовательно отправлены, первое сообщение достигнет приложения-получателя первым. Если участки данных прибывают в неверном порядке, TCP отправляет неупорядоченные данные в буфер до тех пор, пока все данные не могут быть упорядочены и переданы приложению.
Тяжеловесность - TCP необходимо три пакета для установки сокет-соединения перед тем, как отправить данные. TCP следит за надежностью и перегрузками.
Потоковость - данные читаются как поток байтов, не передается никаких особых обозначений для границ сообщения или сегментов.
UDP - более простой, основанный на сообщениях протокол без установления соединения. Протоколы такого типа не устанавливают выделенного соединения между двумя хостами. Связь достигается путем передачи информации в одном направлении от источника к получателю без проверки готовности или состояния получателя. Однако, основным преимуществом UDP над TCP являются приложения для голосовой связи через интернет-протокол (Voice over IP, VoIP), в котором любое "рукопожатие" помешало бы хорошей голосовой связи. В VoIP считается, что конечные пользователи в реальном времени предоставят любое необходимое подтверждение о получении сообщения.
Ненадежный - когда сообщение посылается, неизвестно достигнет ли оно своего назначения - оно может потеряться по пути. Нет таких понятий, как подтверждение, повторная передача, тайм-аут.
Неупорядоченность - если два сообщения отправлены одному получателю, то порядок их достижения цели не может быть предугадан.
Легковесность - никакого упорядочивания сообщений, никакого отслеживания соединений и т.д. Это небольшой транспортный уровень, разработанный на IP.
Датаграммы - пакеты посылаются по отдельности и проверяются на целостность только если они прибыли. Пакеты имеют определенные границы, которые соблюдаются после получения, то есть операция чтения на сокете-получателе выдаст сообщение таким, каким оно было изначально послано.
Нет контроля перегрузок - UDP сам по себе не избегает перегрузок. Для приложений с большой пропускной способностью возможно вызвать коллапс перегрузок, если только они не реализуют меры контроля на прикладном уровне.
Сообщение отредактировал anton-gar - Суббота, 18 Августа 2012, 01:11
для игр в реальном времени точно UDP,при TCP много стадий проверки сокета проходит, что незачем.(UDP) Групповая рассылка (типо чатов) вещает с определенного класса адресов типо такого 255.44.33.03,с других не подходит, для игр пошаговых можно и TCP.У тебя проблем не будет с простыми приложениями сервера echo, но самая главная проблема это организовать взаимодействие потоков(многопоточный сервер),взаимоблокировка и прочие удовольствие))). Никакой здравомыслящий человек не будет приводить здесь пример такого сервера(рабочего), так что как и все придется самому. Совет, разберись хорошо с Thread,Monitor,и прочие семафоры это с экономит тебе нервы и время, кстати в этой книги некоторый темы хорошо раскрыты
"Дейтел Х. C# в подлиннике. Наиболее полное руководство. 2006, 1057 стр..djvu" "Arhitektura_korporativnih_programmnih_prilojzeniy" в догонку
когда рабочий сервер напишешь, поймешь почему не выкладывают рабочие демки
Quote (arthurfok)
а писать с нуля сложно что ли?
Не представляешь как
Сообщение отредактировал _pDirectDevice - Воскресенье, 19 Августа 2012, 06:40
arthurfok Для начинаний я бы таки взял TCP. При тестах в локальной сети разницы между TCP и UDP на глаз не будет совсем. В случае с TCP не нужно как-то заботиться о потерянных пакетах (и обрабатывать это дело), не нужно думать о том, что делать если более новый пакет обогнал старый, и т.п. Т.к. все придет именно в той последовательности, в которой было отправлено. Вообщем, с TCP работать проще. Поэтому я бы сделал рабочий вариант именно на нем (т.к. это проще, если опыта нет), а после при необходимости уже доводил бы до ума на UDP (необходимость - риалтайм игра по интернету, например).
Quote (arthurfok)
я пишу 2D стрелялку
Риалтайм значит. Тут еще надо понимать взаимодействие и архитектуру клиент-серверной модели (в таких играх, обычно всеми расчетами занимается сервер и раздает всем клиентам готовые координаты, а клиенты выступают лишь в роли "рендера" игрового мира). C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)