Создание клиент-серверных приложений с примерами на языке php. Часть #1. Клиент-сокеты. Статья #1. +Отсебятина (слово от автора) Целью данных статей является разложение «по-полочкам» идей и реализации клиент-серверных приложений с примерами на языке php. Эта статья, прежде всего адресована новичкам. Собственно, почему я решил её написать: в своё время самому было сложно разобраться в этой проблеме и, тем более, найти полезную информацию. Собственно пробел в этой информации я и постараюсь заполнить. +Запуск шатла…(Введение в тему) Для начала я проясню, что такое клиет-серверные предложения и для чего вам может пригодиться эта статья. Клиент-серверные приложения-это, грубо говоря, 2 программы: одна-клиент, другая-сервер, причём они могут меняться местами. Рассмотрим отношение клиент-сервер на нескольких упрощённых примерах: 1)Вы набираете в браузере адрес http://microsoft.com и что происходит? Сначала браузер отсылает запрос вашему провайдеру, после чего провайдер отсылает копию этого запроса серверу microsoft.com, который возвращает ответ. Ответ проходит через провайдера и доходит до браузера, который его и обрабатывает. Выглядит это следующим образом: Браузер (клиент)->провайдер(сервер, клиент)->Microsoft.com(сервер) Microsoft.com(сервер)-> ваш провайдер(сервер, клиент)-> Браузер (клиент) Как можно заметить, провайдер выполняет двойственную роль-он и принимает данные и отправляет их. 2)Вы общаетесь в icq, отправляете сообщение на номер 111111(ваш номер-222222). Итак, ваш icq-клиент отправляет запрос серверу icq (который, как и в предыдущем примере, проходит через провайдера), который передаёт его вашему собеседнику и получает данные о том, принял ли пользователь сообщение. Icq[222222] (клиент)->провайдер (сервер, клиент)->ICQ[сервер](сервер)->icq[111111] (клиент) Как мы видим, здесь у нас уже 2 сервера и 2 клиента 3)Спам рассылка Итак, вы спамер Вы, собрав базу для спама, отправляете сообщения через ОДИН 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 серверами. Все комментарии принимаются и обязательно повлияют на новую статью. Удачи. [rap-kasta]
Оформление хорошее, но сама статья очень маленькая (не по размеру, а по несению информации), по сути - разбор 4-х функций, про которые итак все знают из документации. Если уж тон статья задан как расжёвывательский для маленьких, то нужно писать побольше. Вот сейчас горели страсти по поводу потоков в php, тоже стоит отметить с примером реализации и тп.
а как быть если php.ini: disable functions = fsockopen, pfsockopen, tp_connect, ftp_ssl_connect, socket_create, socket_connect, socket_bind, socket_listen, socket_write, socket_send, socket_sendto существуют другие реализации?
даже не могу представить что будет в следующих статьях=\ Для тех кто знает php ничего нового не подчерпнут из нее, а те кто только учат, вообщем есть более лучший и содержательный (примеры не такие примитивные). semmes +1
паумничаю =))) это как "местами"? соединение обрывается, клиентское становиться серверным а серверное клиентским? жестоко пойми ты серверное приложение не то которое данные только отдает, оно и принимать может. и клиентское тоже. чо ты с провайдером зациклился то? пакет может проскакать хз какой путь пока дойдет до серва =\ хотел бы я такой номер =))) вообще нифига невпер. где нащитал 2 сервера? провайдер не сервер, провайдер - дословно ПОСТАВЩИК. он соединение с сервером те обеспечивает. почему тогда при приходе пакета от клиента к серверу первого собеседника он проходит прова а от серва ко второму клиента его минует сам то понял? за старание конечно плюс но ты наверно понятия не имееш о маршрутиризации сетей не в обиду. да нидайбог. ты ыхотя бы поверхностно изучил SMTP протокол. а еще сервер ответы клиенту шлет после комманды принимаемой.
да и еще по поводу ф-ции fputs, fgets fputs записивает данные в файл, декскриптор которого дан функции как первый параметр. в этом случае кончено можно сказать что функция передает данные серверу. но хорошо бы было если бы автор написал более подробно обо всем. относительно статьи самой. в ней много ошибок (имхо). все таки если статья для новичков то лучше было бы если бы все нормально описалось бы. с нормальными примерами. новичкам это мало чего полезного даст (опять таки имхо)
Содержание не соответствует названию, кроме описания (и то неполного) некоторых функций ничего стоящего не содержит. Где примеры таких приложений? ЗЫ Статья будет удалена, если через 3 дня не будет дополнена и отредактирована ТС по причине нулевой ценности. скорее всего это не будет сделанно ТС.
элементарно. на обычных сокетах (socket_...) по теме - слишком много воды. и мало информации. пиши по сужеству. лучше б сделал 1 статью ЗЫ. рэп кал. ----added----- епт. это ж прошлогодняя тема. продолжения я так понял небыло?
Собственно отвечу на все вопросы: 1)Про время моих постов: заходил и уидел, что популярностью статья не пользуется, потому и не писал ничего, хотя вторая часть статьи уже давно написана 2)Я сразу сказал что статья для новичков и я показал ВООБЩЕ что есть сервер с простыми примерами, моей целью не было рассказывать о ом как работает провайдер 3)Пример со спамом всего-лишь пример, на вопрос о том работал ли я с SMTP - да работал и работал также с POP. 4)Серверные приложения на php вполне реальны, или прокси сервер на php (не те что анонимайзеры) по-вашему не существут....но я почему-то своим пользуюсь 5)можете удалять если не нравится 6)Мне по на то нраивтся вам рэп или нет.