<MyRusakov.ru />

Создание движка на PHP и MySQL 2.0

Создание движка на PHP и MySQL 2.0

Видеокурс "Создание движка на PHP и MySQL 2.0" научит Вас создавать профессиональные движки для сайтов на PHP и MySQL с использованием ООП и паттерна MVC.

В курсе разобрана вся теория по структуре движка: как всё устроено, какие должны быть объекты, какая у них иерархия и как они взаимодействуют между собой.

В практической части будет создан движок с чистого листа. Будет создано ядро, все адаптеры, все вспомогательные классы, а также классы для работы с объектами базы данных. И чтобы курс был максимально полезным, будет создан движок для сайта MyRusakov.ru.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Сокеты: Клиент на PHP

Сокеты: Клиент на PHP

В предыдущей статье я рассказывал про как создать сервер на PHP. Мы с Вами с использованием сокетов создали сервер на PHP. А в этой статье мы с Вами напишем клиента на PHP, который будет отправлять запрос на сервер и получать от него ответ.

Привожу код клиента на PHP:

<?php
  header('Content-Type: text/plain;'); //Мы будем выводить простой текст
  set_time_limit(0); //Скрипт должен работать постоянно
  ob_implicit_flush(); //Все echo должны сразу же выводиться
  $address = 'localhost'; //Адрес работы сервера
  $port = 1985; //Порт работы сервера (лучше какой-нибудь редкоиспользуемый)
  if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    //AF_INET - семейство протоколов
    //SOCK_STREAM - тип сокета
    //SOL_TCP - протокол
    echo "Ошибка создания сокета";
  }
  else {
    echo "Сокет создан\n";
  }
  $result = socket_connect($socket, $address, $port);
  if ($result === false) {
    echo "Ошибка при подключении к сокету";
  } else {
    echo "Подключение к сокету прошло успешно\n";
  }
  $out = socket_read($socket, 1024); //Читаем сообщение от сервера
  echo "Сообщение от сервера: $out.\n";
  $msg = "15";
  echo "Сообщение серверу: $msg\n";
  socket_write($socket, $msg, strlen($msg)); //Отправляем серверу сообщение
  $out = socket_read($socket, 1024); //Читаем сообщение от сервера
  echo "Сообщение от сервера: $out.\n"; //Выводим сообщение от сервера
  $msg = 'exit'; //Команда отключения
  echo "Сообщение серверу: $msg\n";
  socket_write($socket, $msg, strlen($msg));
  echo "Соединение завершено\n";
  //Останавливаем работу с сокетом
  if (isset($socket)) {
    socket_close($socket);
    echo "Сокет успешно закрыт";
  }
?>

Код хорошо прокомментирован, поэтому, думаю, что здесь всё предельно понятно. Алгоритм работы клиента тривиальный: создание сокета, подключение к серверу, отправка запросов, получение ответов, закрытие соединения. Мы с Вами отправили число 15. Если Вы читали предыдущую статью, то помните, что задача сервера это число возвести в квадрат и вернуть его. Поэтому если Вы запустите этот клиент, то увидите от сервера 225 (15*15). Потом мы подаём команду shutdown, которая останавливает сервер.

Теперь у Вас есть минимальный набор знаний по работе с сокетами, а вообще тема очень интересная, поэтому Вы можете изучить её более детально. Вы можете создавать очень сложные клиент-серверные приложения, к котором Вы всегда сможете подключиться и отправлять самые различные запросы, которые сервер будет обрабатывать.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (8):

Ziggor Ziggor 22.01.2012 22:19:15

Михаил,вы сами проверяли свой скрипт клиента относительно серверу? Вот нмпример строка $result = socket_connect($socket, $address, $port); как она должна подключаться если переменной $socket нет,а есть $sock. Или я ошибаюсь?=)

Ответить

Admin Admin 22.01.2012 22:27:17

Спасибо, подправил!

Ответить

blerko blerko 19.09.2012 12:55:51

Михаил,здравствуйте.Я никогда не имел дел с сокетом,с чего лучше начинать?Мне нужно чтобы скрипт вытаскивал инфу с игрового сервера и выводил в понятном мне формате.Что посоветуйте? вот пример. http://narod.ru/disk/61234356001.1422047c71b5cae33ed0f7a891da12b5/inv.php.html

Ответить

Admin Admin 19.09.2012 15:02:22

Для начала с примером в статье и разберитесь. Как именно реализовать это для игрового сервера, это уже другой вопрос.

Ответить

vladlaas vladlaas 18.05.2013 16:48:10

Добрый день! Я не совсем пойму. Ваш пример работает только кога "Сервер" и "клиент" запущен в браузере иначе выдает "Сокет создан <!--error--><br /> <b>Warning</b>: socket_connect() [<a href='function.socket-connect'>function.socket-connect</a>]: unable to connect [0]: Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение. in <b>Z:\home\localhost\www\testim\test_soces\client.php</b> on line <b>16</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script>Ошибка при подключении к сокету<!--error--><br /> <b>Warning</b>: socket_read() [<a href='function.socket-read'>function.socket-read</a>]: unable to read from socket [0]: Запрос на отправку или получение данных (when sending on a datagram socket using a sendto call) no address was supplied. in <b>Z:\home\localhost\www\testim\test_soces\client.php</b> on line <b>22</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script>Сообщение от сервера: . Сообщение серверу: 29 <!--error--><br /> <b>Warning</b>: socket_write() [<a href='function.socket-write'>function.socket-write</a>]: unable to write to socket [0]: Запрос на отправку или получение данных (when sending on a datagram socket using a sendto call) no address was supplied. in <b>Z:\home\localhost\www\testim\test_soces\client.php</b> on line <b>26</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script><!--error--><br /> <b>Warning</b>: socket_read() [<a href='function.socket-read'>function.socket-read</a>]: unable to read from socket [0]: Запрос на отправку или получение данных (when sending on a datagram socket using a sendto call) no address was supplied. in <b>Z:\home\localhost\www\testim\test_soces\client.php</b> on line <b>27</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script>Сообщение от сервера: . Сообщение серверу: exit <!--error--><br /> <b>Warning</b>: socket_write() [<a href='function.socket-write'>function.socket-write</a>]: unable to write to socket [0]: Запрос на отправку или получение данных (when sending on a datagram socket using a sendto call) no address was supplied. in <b>Z:\home\localhost\www\testim\test_soces\client.php</b> on line <b>31</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script>Соединение завершено Сокет успешно закрыт" Вы немогли бы описать что не так или это так и должно быть! Если так и должно быть то совсем не понимаю зачем они нужны эти "Сокеты"

Ответить

Admin Admin 18.05.2013 18:14:35

Не подключается, возможно, сервер не сделали, чтобы было куда подключаться.

Ответить

vladlaas vladlaas 18.05.2013 18:24:07

Вроде все сделал правильно! Если в браузере отткрыт фаил "server.php" то все срабатывает нормально, но только один раз. Что можно сделать? Я вроде все установил как надо

Ответить

pan-ili-propal pan-ili-propal 09.11.2014 14:40:44

Михаил, Здравствуйте. Я сохранил код сервера и код клиента, затем открыл вкладку в браузере через которую запустил код сервера, а потом запустил код клиента и все работает замечательно, но почему-то всего лишь один раз, если запустить код клиента еще один раз, то лезут ошибки "socket_connect(): unable to connect [10061]: No connection could be made because the target machine actively refused it." Пробовал не закрывать соединение как на сервере так и на клиенте, код не работает, а точнее лезут опять же ошибки. Как запустить сервер так, чтобы я мог в любое время обращаться к нему? Если обращаться к серверу через HTML5 websocket нужно ли серверу отправлять заголовки о том, что он поддерживает сокеты? И в какой части кода они должны отправляться? Заранее очень благодарен за ответы!

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.