Создание клиент-серверных приложений с примерами на языке php. Клиент-сокеты.Статья 1

Часть #1. Клиент-сокеты.
Статья #1.

+Отсебятина (слово от автора)
Целью данных статей является разложение «по-полочкам» идей и реализации клиент-серверных приложений с примерами на языке php. Эта статья, прежде всего адресована новичкам.
Собственно, почему я решил её написать: в своё время самому было сложно разобраться в этой проблеме и, тем более, найти полезную информацию. Собственно пробел в этой информации я и постараюсь заполнить.

+Запуск шатла…(Введение в тему)
Для начала я проясню, что такое клиет-серверные предложения и для чего вам может пригодиться эта статья.
Клиент-серверные приложения-это, грубо говоря, 2 программы: одна-клиент, другая-сервер, причём они могут меняться местами. Рассмотрим отношение клиент-сервер на нескольких упрощённых примерах:
1)Вы набираете в браузере адрес https://microsoft.com и что происходит? Сначала браузер отсылает запрос вашему провайдеру, после чего провайдер отсылает копию этого запроса серверу microsoft.com, который возвращает ответ. Ответ проходит через провайдера и доходит до браузера, который его и обрабатывает.
Выглядит это следующим образом:

Браузер (клиент)->провайдер(сервер, клиент)->Microsoft.com(сервер)
Microsoft.com(сервер)-> ваш провайдер(сервер, клиент)-> Браузер (клиент)

Как можно заметить, провайдер выполняет двойственную роль-он и принимает данные и отправляет их.

2)Вы общаетесь в icq, отправляете сообщение на номер 111111(ваш номер-222222).
Итак, ваш icq-клиент отправляет запрос серверу icq (который, как и в предыдущем примере, проходит через провайдера), который передаёт его вашему собеседнику и получает данные о том, принял ли пользователь сообщение.
Icq[222222] (клиент)->провайдер (сервер, клиент)->ICQ[сервер](сервер)->icq[111111] (клиент)

Как мы видим, здесь у нас уже 2 сервера и 2 клиента

3)Спам (spam) рассылка 
Итак, вы спамер  Вы, собрав базу для спама, отправляете сообщения через ОДИН SMTP сервер какого-то идиотского буржуйного фри-хостинга :

1)Вы(клиент)->SMTP сервер[HELO,авторизация, сообщение] (сервер)
*Эти действия проходят ровно столько раз сколько мессаг
2)Юзер(клиент)-> провайдер (сервер, клиент)->POP3/IMAP/ну или другой сервер[авторизация, запрос количества сообщений, приём сообщений] (сервер)

Эти действия проходят ровно столько раз сколько мессаг на сервере:
Юзер[запрос сообщения] (клиент)-> провайдер (сервер, клиент)->POP3/IMAP/ну или другой сервер [сообщение] (сервер) ->провайдер юзера (сервер, клиент)->юзер(клиент)
По всем примерам хочу заметить, что и сервер общается через провайдера, провайдер(скорее всего) имеет несколько сервером ну и тд.…
Итак, надеюсь по примерам вы поняли что такое сервер и что такое клиент, если не поняли, то объясню коротко: клиент-это тот кому нужна информция, сервер-это тот кто её даёт. Андерстенд?  Ну поехали дальше….

+Шатл забыли заправить бензином(продолжение введения в тему)
Итак, в этой первой статье я начну разговор о клиентских приложениях. Что это может быть? Например, браузер, icq-клиент, грабер новостей ФК «Динамо», банальный спамер и… в общем всего не пересчитать.
Ну что ж, я желаю вам успехов, приступим к изучению этой интересной темы.

+Неужели полетели? (разбор клиент-сокетных функций php)
В языке php не так-то много клиент-сокетных функций, но все они способны удовлетворить любые нужды.

1)Fsockopen($server,$port,$errno,$errstr,$timeout).
Эта функция, подобно fopen(), возвращает дескриптор сессии. Теперь рассмотрим каждый параметр отдельно:
$server-сервер, к которому следует подключиться
$port-порт, к которому следует подключиться
$errno-переменная, в которую будут сохраняться числовые идентификаторы ошибок
$errstr-переменная, в которую будут сохраняться описания ошибок
$timeout-время в секундах, за которое сервер должен подключиться, если не будет укладываться во время, то возвратит ошибку.

Данная функция выполняет подключение к серверу, например код:
PHP код:
<?php
$connect=@fsockopen(“yandex.ru”,80,$errno,$errstr,  30);
?>

Попытается за 30 секунд подключиться к серверу yandex.ru на 80 порту (к веб-серверу yandex’а) и, если всё пройдёт успешно запишет в $connect идентификатор сессии с сервером.
2)fputs($connect,$what);
С этой функцией вы уже должны быть знакомы по работе с файлами, тут же ситуация такая же: эта функция передаёт данные $what серверу, к которому был подключен дескриптор $connect.
3)fgets($connect,[длина строки])
Эта функция принимает ответ от сервера, к которому вы подключились.
Второй параметр, указывающий на то, какой максимальной длины может быть строка, не обязателен.
4)fclose($connect);
Эта функция вам тоже знакома: она «отсоединяет» вас от сервера, указанного в дескрипторе $connect.

Таким образом, подключившись к серверу можно с ним общаться как с файлом с одной лишь разницей – общение сервера и клиента можно считать двусторонним, а общение с файлом - односторонним.

В следующей статье мы рассмотрим применение полученных данных на практике - в работе с http и smtp серверами.

Все комментарии принимаются и обязательно повлияют на новую статью. Удачи.

Подпись автора

Хотите увидеть немного магии?