| Делфи [13] |
| Game Maker [9] |
| 3D Game Studio [1] |
| Blitz 3D [7] |
| ПХП (PHP) [3] |
| С++ (C#) [7] |
| Остальные [20] |
| Итак, вы решили изучить основу многих протоколов высшего уровня, то бишь ТСР? Хорошо! Чем он хорош? Гарантией того, что сообщение придет в целости и сохранности. Однако, в результате этого мы теряем скорость. Целеобразно использовать ТСР там, где надежность важнее скорости. В ином случае - используйте UDP(я уже написал туториал по нему - почитайте). Начнем, пожалуй, с пары нюансов. Во-первых, ТСР использует архитектуру "клиент-сервер", что облегчает нам жизнь, и на нужно знать IP-адресс только сервера. Всмысле, сначала. Во-вторых, тут насчет портов такой же принцип как и в UDP. Порты до 1024 являются системными и использовать их в сетевых играх не стоит. Также следует поберечься от портов с номерами от 1024 до 49151 - они зарезервированны. Рекомендуется использовать порты с номерами от 49152 до 65535 - они динамические. В отличие от UDP, в ТСР вам надо сразу определится с портом, ибо тут нет таких вольностей, как "обнаружение свободных портов". Рассмотрев моменты, приступим к рассмотру команд. Итак, так как в ТСР архитектура "клиент-сервер", значит у нас имеется две команды инициализации сеанса: для сервера и для клиента. Для начала давайте разберемся с сервером. поток_сервера=CreateTCPServer(порт) Думаю, в примере это будет смотрется понятнее: svr=CreateTCPServer(80) Таким образом, мы создали сервер на порте 80. К слову, если вы на блице пишете программу для работы с сетью (броузер, почтовый клиент и т.д.), то вы конечно же можете использовать системные порты - они для того и предназначены. Однако, если вы создаете игру - берите динамический и только. Вернемся к коду. Мы каждый цикл пытаемся принять входящий поток, чтобы в цикле можно было соответственно читать и посылать информацию. Чтобы получить IP-адресс пославшего, используем функцию TCPStreamIP. Синтаксис: переменная=TCPStreamIP(поток) Возвращает целочисленный IP в переменную. Если вам надо получить точечный IP - смотрите в справке DottedIP$() переменная=TCPStreamPort(поток) Обьяснять, думаю не надо? WriteLine pot,"1" Как его считать? Опять таки, очень просто! С помощью, думаю, знакомой вам функции Eof: Eof(поток) Возвращает False если информация в потоке еще не закончилась и True, если вся уже пришла и считана. Вот как это: svr=CreateTCPServer(50000) Чтобы написать игроку, нужно писать именно на уникальный поток. Сейчас я вам покажу, как собсно получить этот поток: Type Player Field stream svr=CreateTCPServer(50000) Далее, чтобы получать сообщения не от новых игроков, а от тех, что уже записаны, используем следующую схему: For p.Player=Each Player If ReadAvail(p\stream) Then Думаю, все ясно как пень. Самая сложная часть позади. Теперь давайте о клиенте. поток=OpenTCPStream(IP_сервера,порт) Возвращает 0 если неуспешно, и поток - если успешно. Тут все проще, нежели у сервера. Просто посылаем информацию на этот же поток и все! Для наглядности пример: pot=OpenTCPStream("prevedmedved.ru",80) Вот и все! Что еще хотелось бы сказать, так это насчет посылания сообщения другим клиентам. Так вот. ВСЕ передается через сервер. Вот так вот. Если надо послать мэссагу кому-то одному - шлем запрос серверу. Хотим всем - шлем запрос к серверу. И сервер должен все эти запросы отрабатывать. | |
| Категория: Blitz 3D | Добавил: MrWolf_ (11.08.2010) | |
| Просмотров: 291 | Рейтинг: 0.0/0 |
| Всего комментариев: 0 | |








Сайт:
Новости:
Скачать:
Дополнительно:
Форум:









