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

Discussion in 'Статьи' started by rap-kasta, 4 Nov 2007.

  1. rap-kasta

    rap-kasta New Member

    Joined:
    3 Nov 2007
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    Создание клиент-серверных приложений с примерами на языке 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]
     
    2 people like this.
  2. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Оформление хорошее, но сама статья очень маленькая (не по размеру, а по несению информации), по сути - разбор 4-х функций, про которые итак все знают из документации. Если уж тон статья задан как расжёвывательский для маленьких, то нужно писать побольше. Вот сейчас горели страсти по поводу потоков в php, тоже стоит отметить с примером реализации и тп.
     
  3. semmes

    semmes Banned

    Joined:
    18 Nov 2007
    Messages:
    12
    Likes Received:
    3
    Reputations:
    0
    а как быть если 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


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

    AFoST Elder - Старейшина

    Joined:
    28 May 2007
    Messages:
    588
    Likes Received:
    485
    Reputations:
    176
    curl ещё есть.
     
  5. gibson

    gibson Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    даже не могу представить что будет в следующих статьях=\ Для тех кто знает php ничего нового не подчерпнут из нее, а те кто только учат, вообщем есть более лучший и содержательный (примеры не такие примитивные).
    semmes +1
     
    1 person likes this.
  6. M-K

    M-K New Member

    Joined:
    16 Aug 2007
    Messages:
    3
    Likes Received:
    1
    Reputations:
    1
    А где поподробнее почитать можно?
     
  7. zythar

    zythar Elder - Старейшина

    Joined:
    16 Feb 2008
    Messages:
    517
    Likes Received:
    109
    Reputations:
    5
    в гугле ((*

    2тс как ты планируешь написать серверное приложение на РНР?
     
    1 person likes this.
  8. MegaDeth

    MegaDeth Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    72
    Reputations:
    13
    паумничаю =)))
    это как "местами"? :rolleyes:
    соединение обрывается, клиентское
    становиться серверным а серверное клиентским? жестоко
    пойми ты серверное приложение не то которое данные только отдает, оно и принимать может. и клиентское тоже.
    чо ты с провайдером зациклился то? пакет может проскакать хз какой путь пока дойдет до серва =\
    хотел бы я такой номер =)))
    вообще нифига невпер. где нащитал 2 сервера? провайдер не сервер, провайдер - дословно ПОСТАВЩИК. он соединение с сервером те обеспечивает. почему тогда при приходе пакета от клиента к серверу первого собеседника он проходит прова а от серва ко второму клиента его минует :D
    сам то понял? :confused:
    за старание конечно плюс но ты наверно понятия не имееш о маршрутиризации сетей :rolleyes: не в обиду.
    да нидайбог. ты ыхотя бы поверхностно изучил SMTP протокол. а еще сервер ответы клиенту шлет после комманды принимаемой.
     
  9. zythar

    zythar Elder - Старейшина

    Joined:
    16 Feb 2008
    Messages:
    517
    Likes Received:
    109
    Reputations:
    5
    да и еще по поводу ф-ции
    fputs, fgets

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

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

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Содержание не соответствует названию, кроме описания (и то неполного) некоторых функций ничего стоящего не содержит. Где примеры таких приложений?
    ЗЫ Статья будет удалена, если через 3 дня не будет дополнена и отредактирована ТС по причине нулевой ценности.
    скорее всего это не будет сделанно ТС.
     
    #10 -=lebed=-, 11 Mar 2008
    Last edited: 11 Mar 2008
  11. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    статья смысловой нагрузки не несёт... php.net всё и так подробно описывает
     
  12. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    элементарно. на обычных сокетах (socket_...)

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

    ЗЫ. рэп кал.

    ----added-----
    епт. это ж прошлогодняя тема. продолжения я так понял небыло?
     
    #12 mr.The, 12 Mar 2008
    Last edited: 12 Mar 2008
    1 person likes this.
  13. rap-kasta

    rap-kasta New Member

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