Php програмування сокетів - створення серверних сокетів

Сторінка 3 з 4

Створення серверних сокетів

socket_bind ($ socket, $ address [, $ port]);

Другий крок: налаштувати сокет на прослуховування трафіку на предмет спроб підключення до нього. Це робиться за допомогою функції socket_listen ():

Де $ socket - прив'язаний раніше сокет, який повинен бути включений на прослушінаніе. Необов'язковий параметр $ backlog використовується для створення черги за допомогою вказівки максимально допустимого числа вхідних підключень, які розміщені в чергу. Якщо цей параметр не вказано, то сокет, який намагається підключитися, отримає відмову в обслуговуванні, поки серверний сокет недоступний. В результаті виконання ця функція повертає булевское значення, яке вказує на успішність налаштування серверного сокета на прослуховування.

Третій і останній крок у створенні серверного сокета - дати команду на прийом вхідних підключень. Це робиться функцією socket_accept ():

Де $ socket - прив'язаний сокет, включений на прослуховування, який повинен приймати з'єднання.

При виконанні ця функція не поверне управління до тих пір, поки не завершиться очікування вхідних підключень. Як тільки воно буде встановлено, функція поверне новий сокетних ресурс, який використовується для підключення. Якщо вказаний в параметрі $ socket сокет налаштований як неблокірующій, функція socket_accept () завжди негайно буде повертати false.

Сокетних ресурс, повернутий функцією socket_accept (), не може бути повторно використаний, оскільки він обслуговує тільки одне певне Ви зараз приєднані. Сокет, переданий їй в параметрі $ socket, однак, може бути використаний повторно.

У лістингу нижче створюється простий сокетних сервер, який приймає єдине підключення, максимум 1024 байти вхідного потоку і відображає цей потік користувачеві.

Створення простого сервера на основі сокета

У мене на компі цей скрипт лежить в папці Денвера по шляху: C: \ WebServers \ home \ app.loc \ www \ sockets \ test.php
Тепер, якщо запустити наш скрипт з командного рядка таким чином: C: \ WebServers \ home \ app.loc \ www \ sockets> php test.php У командному рядку ми побачимо наступне:

Сервер у відповідь пришле нам наш же запит + заголовки:

У командному рядку ми побачимо нові дані

А так же нове запрошення введення - свідоцтво про те, що процес отрубился. Це можна так само перевірити командою netstat -a і Убуд, що порт 4545 в списку не присутня.

Щоб створити сервер, сокети якого ведуть прослуховування на портах з номерами нижче 1000, даний користувач повинен мати в системі адміністративні права. Також слід зазначити, що наведений вище сценарій не завершить роботу до тих пір, поки не буде встановлено з'єднання, що може створити враження "зависання".