PDA

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


rap-kasta
04.11.2007, 12:40
Создание клиент-серверных приложений с примерами на языке 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
$connect=@fsockopen(“yandex.ru”,80,$errno,$err str,30);
?>
Попытается за 30 секунд подключиться к серверу yandex.ru на 80 порту (к веб-серверу yandex’а) и, если всё пройдёт успешно запишет в $connect идентификатор сессии с сервером.
2)fputs($connect,$what);
С этой функцией вы уже должны быть знакомы по работе с файлами, тут же ситуация такая же: эта функция передаёт данные $what серверу, к которому был подключен дескриптор $connect.
3)fgets($connect,[длина строки])
Эта функция принимает ответ от сервера, к которому вы подключились.
Второй параметр, указывающий на то, какой максимальной длины может быть строка, не обязателен.
4)fclose($connect);
Эта функция вам тоже знакома: она «отсоединяет» вас от сервера, указанного в дескрипторе $connect.

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

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

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

[rap-kasta]

fucker"ok
07.11.2007, 20:36
Оформление хорошее, но сама статья очень маленькая (не по размеру, а по несению информации), по сути - разбор 4-х функций, про которые итак все знают из документации. Если уж тон статья задан как расжёвывательский для маленьких, то нужно писать побольше. Вот сейчас горели страсти по поводу потоков в php, тоже стоит отметить с примером реализации и тп.

semmes
19.11.2007, 21:56
а как быть если 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


существуют другие реализации?

AFoST
19.11.2007, 22:11
curl ещё есть.

gibson
19.11.2007, 22:16
Клиент-сокеты.Статья 1 даже не могу представить что будет в следующих статьях=\ Для тех кто знает php ничего нового не подчерпнут из нее, а те кто только учат, вообщем есть более лучший и содержательный (примеры не такие примитивные).
semmes +1

M-K
11.03.2008, 18:45
А где поподробнее почитать можно?

zythar
11.03.2008, 20:22
в гугле ((*

2тс как ты планируешь написать серверное приложение на РНР?

MegaDeth
11.03.2008, 21:02
паумничаю =)))
Клиент-серверные приложения-это, грубо говоря, 2 программы: одна-клиент, другая-сервер, причём они могут меняться местами.
это как "местами"? :rolleyes:
соединение обрывается, клиентское
становиться серверным а серверное клиентским? жестоко
пойми ты серверное приложение не то которое данные только отдает, оно и принимать может. и клиентское тоже.
Браузер (клиент)->провайдер(сервер, клиент)->Microsoft.com(сервер)
Microsoft.com(сервер)-> ваш провайдер(сервер, клиент)-> Браузер (клиент)
чо ты с провайдером зациклился то? пакет может проскакать хз какой путь пока дойдет до серва =\
ваш номер-222222)
хотел бы я такой номер =)))
Icq[222222] (клиент)->провайдер (сервер, клиент)->ICQ[сервер](сервер)->icq[111111] (клиент)

Как мы видим, здесь у нас уже 2 сервера и 2 клиента
вообще нифига невпер. где нащитал 2 сервера? провайдер не сервер, провайдер - дословно ПОСТАВЩИК. он соединение с сервером те обеспечивает. почему тогда при приходе пакета от клиента к серверу первого собеседника он проходит прова а от серва ко второму клиента его минует :D
Итак, надеюсь по примерам вы поняли что такое сервер и что такое клиент
сам то понял? :confused:
за старание конечно плюс но ты наверно понятия не имееш о маршрутиризации сетей :rolleyes: не в обиду.
Итак, вы спамер  Вы, собрав базу для спама, отправляете сообщения через ОДИН SMTP сервер какого-то идиотского буржуйного фри-хостинга :
да нидайбог. ты ыхотя бы поверхностно изучил SMTP протокол. а еще сервер ответы клиенту шлет после комманды принимаемой.

zythar
11.03.2008, 21:16
да и еще по поводу ф-ции
fputs, fgets

fputs записивает данные в файл, декскриптор которого дан функции как первый параметр.
в этом случае кончено можно сказать что функция передает данные серверу. но хорошо бы было если бы автор написал более подробно обо всем.

относительно статьи самой.
в ней много ошибок (имхо). все таки если статья для новичков то лучше было бы если бы все нормально описалось бы. с нормальными примерами. новичкам это мало чего полезного даст (опять таки имхо)

-=lebed=-
11.03.2008, 21:30
Создание клиент-серверных приложений с примерами на языке php. Клиент-сокеты.Статья 1 Содержание не соответствует названию, кроме описания (и то неполного) некоторых функций ничего стоящего не содержит. Где примеры таких приложений?
ЗЫ Статья будет удалена, если через 3 дня не будет дополнена и отредактирована ТС по причине нулевой ценности.
Последнее сообщение:
Немного об аворском праве...
08.11.2007 23:30 скорее всего это не будет сделанно ТС.

Sharky
11.03.2008, 21:30
статья смысловой нагрузки не несёт... php.net всё и так подробно описывает

mr.The
12.03.2008, 01:17
2тс как ты планируешь написать серверное приложение на РНР?
элементарно. на обычных сокетах (socket_...)

по теме - слишком много воды. и мало информации. пиши по сужеству. лучше б сделал 1 статью

ЗЫ. рэп кал.

----added-----
епт. это ж прошлогодняя тема. продолжения я так понял небыло?

rap-kasta
13.03.2008, 17:59
Собственно отвечу на все вопросы:
1)Про время моих постов: заходил и уидел, что популярностью статья не пользуется, потому и не писал ничего, хотя вторая часть статьи уже давно написана
2)Я сразу сказал что статья для новичков и я показал ВООБЩЕ что есть сервер с простыми примерами, моей целью не было рассказывать о ом как работает провайдер
3)Пример со спамом всего-лишь пример, на вопрос о том работал ли я с SMTP - да работал и работал также с POP.
4)Серверные приложения на php вполне реальны, или прокси сервер на php (не те что анонимайзеры) по-вашему не существут....но я почему-то своим пользуюсь
5)можете удалять если не нравится
6)Мне по на то нраивтся вам рэп или нет.