Войти
ПрограммированиеСтатьиСеть

WinSock2 для игр.

Автор: Stefan Hajnoczi

Введение
Архитектура
Довольно теории, даешь WinSock!
Блокированные, неблокированные и асинхронные сокеты.
Проверка ошибок
Цена за асинхронные сокеты
Как пользоваться демкой?
Несколько слов о времени запаздывания

Введение

На днях я зашёл на #gamedev (мой ник - jadam) и спросил: "Знает ли кто-нибудь DirectPlay?". Я ожидал что-нибудь вроде "Да, отправляйся на www.directplay.com и качай он-лайн книжку!". Но никто даже не знал о нём. Тогда я спросил, что они используют для работы с сетью и все как один ответили - WinSock. Первоначально я собирался изучать DirectPlay, но я думаю, что сейчас просто нет достаточного количества информации по этой теме.

Я использовал WinSock и до этого, но на Visual BASIC-е. Кстати сказать, я был удивлён его простоте.  Я думал, что в Си++ всё будет также; это была большая ошибка.

Что такое WinSock?

WinSock - это API, который позволяет создавать и использовать сокеты (sockets). Сокеты - это соединения через Интернет или локальную сеть. Эти соединения двухсторонние, т.е. обе стороны могут посылать и принимать информацию. Каждый компьютер, будь он в Интернете или в локальной сети, имеет свой IP-адрес. IP-адрес состоит из 4-х байт, разделённых точками. Например, "129.240.3.5". Заметим также, что каждое из четырёх чисел, определяющих адрес, задается одним байтом, т.е. может принимать значения от 0 до 255. 2564 = 4,294,967,296. Т.е. больше 4-х миллиардов уникальных адресов! Вполне достаточно :). (прим. перев. - на самом деле, не достаточно, но это уже другая история :) Так или иначе, сокет может быть создан между двумя компьютерами, например, с адресами 37.143.125.23 и 64.253.241.72. Проблема состоит в том, что нам нужно иметь одновременно больше одного сокета. Соответственно, мы нуждаемся в дополнительном адресе, чтобы идентифицировать сокеты. Этот адрес зовется портом (port). Находясь в Интернете мы всё время используем порты. Например, стандартный порт для HTTP - 80. Это означает, что после того как мы набираем http://www.intertainment.8m.com в нашем браузере, он выясняет IP-адрес сервера и пытается соединиться с 80-м портом. Порты с 1 по 1000, по большей части, зарезервированы для стандартных протоколов (protocols). Протоколы, чем-то похожи на языки, используемые для общения. Например, HTTP используется для передачи Веб страниц, FTP - для передачи файлов, NNTP - для групп новостей. WinSock даёт Вам возможность создавать сокеты (create), устанавливать  (connect) и разрывать (disconnect) соединения между ними, закрывать (close) их и прослушивать (listen). Прослушивание порта - это простое ожидание некой программой соединения с портом. Эти программы обычно зовутся демонами (daemons). Например, HTTP-демон прослушивает 80 порт и выдает вам index.html при соединении с сервером.

TCP и UDP

Так какая разница между передачей данных по TCP и UDP? TCP использует потоковую (stream) архитектуру, в то время как UDP, использует дейтаграмм (data gram) архитектуру. Другими словами, TCP даёт полную гарантию доставки информации, UDP - нет. Данные, при использовании UDP, могут быть повреждены, потеряны или даже продублированы. Поэтому, мы будем использовать TCP. Хотя существуют и другие протоколы, которые могут быть использованы в WinSock 2, типа DecNet и тому подобные.

Примечание переводчика.

Мне кажется, что необходимо немного расширить эту тему:

"Протокол управления передачей TCP(Transmission Control Protocol) и протокол дейтограмм пользователя UDP(User Datagram Protocol) функционируют на основном уровне стека TCP/IP, называемом также транспортным. Протокол TCP обеспечивает надежную передачу сообщений между удалёнными прикладными процессами за счёт образования логических соединений. Этот протокол позволяет равноранговым объектам на компьютере-отправителе и на компьютере-получателе поддерживать обмен данными в дуплексном режиме. TCP позволяет без ошибок доставить сформированный на одном из компьютеров поток байт в любой другой компьютер, входящий в составную сеть. TCP делит поток байт на части - сегменты и передает их ниже лежащему уровню межсетевого взаимодействия. После того как это сегменты будут доставлены средствами уровня межсетевого взаимодействия в пункт назначения, TCP снова соберёт их в непрерывный поток.

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

В.Г.Олифер, Н.А. Олифер. Компьютерные сети: Принципы, протоколы, технологии. Изд-во "Питер" 2001.

Страницы: 1 2 37 8 Следующая »

#TCP, #UDP, #Winsock, #сокеты

17 февраля 2002 (Обновление: 22 дек. 2009)

Комментарии [9]