Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Работа с сокетами в php
Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2009
Помог: 0 раз(а)
День добрый.
У меня возникла потребность написать чат для игрового клиента и сервера с использованием сокетов. Я даже не представляю с чего начать и где взять конкретную инфу по этой теме. Если кто что нибудь знает или имеет ссылочки на статьи, учебники прошу поделиться ;)
У меня есть на руках сами протоколы:
Client -> Server
А что с протаколами этими делать я не представляю даже ;)
JustUserR
Отправлено: 31 Августа, 2010 - 15:57:14
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
alex4715 пишет:
А что с протаколами этими делать я не представляю даже ;)
Для сетевого взаимодействия сервера и клиента могут использоваться как текстовые так и двоичные форматы протоколов - тем не менее общая схема работы является похожей и сосотоит в последовательной обработке и упаковке/распаковки информационных пакетов В вашем случае протокол предсталяет собой набор сообшений в определннном виде - который включает в себя идентификатор события и связанные с ним данные При вставке собственной информации в передаваемый пакет важно прозвести его предварительное экранирование/кодирование или упаковку под фиксированный размер - это необходимо для сохранения внутренней структуры и явного отличия служебных и информационных полей
Приведенный вами сетевой протокол подразумевает использование некоторых типов данных языков C/C++ - вы можете посмотреть описание здесь http://www[dot]realcoding[dot]net/articl[dot][dot][dot]mirovanie-tcp/ip При переведении кода на язык PHP в котором нет строгой типизаци данных и ограничения размеров для целочисленных элементов - необходимо использовать побитовые операции и функции pack/unpack для выбора нужной части значения
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
alex4715
Отправлено: 01 Сентября, 2010 - 20:50:35
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2009
Помог: 0 раз(а)
Спасибо вам огромное, сейчас сижу читаю ;)
Можно вас попросить написать строчку RecvFrom, что бы мне было понятней как это отправляется. Допустим мы будем отправлять вот такие данные:
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
alex4715 пишет:
Спасибо вам огромное, сейчас сижу читаю ;)
Можно вас попросить написать строчку RecvFrom, что бы мне было понятней как это отправляется. Допустим мы будем отправлять вот такие данные:
Пожалуйста! Для отправки сетевого пакета с требуемой информацией ля используемого вами серсива необходимо сделать следующее - сначала открывается само соединение с применением простого интерфейса с помощью fsockopen - или использования расширенных возможности с функциями пакета socket После инициализации соединения необходимо передать специальый пакет - так как он является обычной строкой то производиться предварительная его упаковка - для приведенного вам примера это будет $send_str=pack("sl",0xFF,accound_id)."cookie".chr(0).pack("l",0x05) - при этом заместо приведенных идентификаторных и строковых констант необходимо установить реальые значения Кроме того конечный вид pack-выражения может отличаться в зависимости от особенносей удаленного сервиса - в случае неработоспособности вы можете попробовать изменить порядок байт для чисел и формат передаваемой строки
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.