| Код | <?php // Разрешаем скрипту выполняться неограниченно долго // (сервер - это программа-демон, которая работает в бесконечном цикле) set_time_limit (0); // Записываем в переменную IP-номер домена, на котором располагается скрипт $address=gethostbyname($_SERVER['SERVER_NAME']); $port=10000; // Записываем номер порта, отведенный под сокет-сервер // Инициализируем новый сокет $sock=socket_create(AF_INET,SOCK__STRSAM, 0); // Связываем сокет с IP и портом socket_bind($sock,$address,$port); // Включаем сокет-сервер в режим прослушивания вызовов от сокетов-клиентов socket_listen($sock,5); // Запускаем бесконечный цикл, в котором проверяем, не присоединился ли // к сокету-серверу клиент while (1) { $acc=socket_accept($sock); // Если соединения нет, то сразу перехолим к следующей итерации if (!$acc) { continue 1; } // Если клиент присоединился, то запускаем цикл, в котором считываем // поступающие от неге данные, и записываем их в строку $buf $buf=''; while(1) { $buf.=socket_read[$acc,204S); // Считываем доступные данные // Если от клиента поступает команда close, то отключаем соединение if {$buf=='close\0') { socket_close($acc); break 2; } // Если от клиента поступает команда quit, то останавливаем работу // сервера if ($buf=='quit\0') { break 1; } // Если новую партию считанного текста завершает нулевой байт, // значит сообщение закончено. Его нужно переслать назад клиенту, // и начать цикл сначала. if(substr($buf,strlen($buf)-1,1)=='\0')){ socket_write($acc,$buf); $buf=''; } } }
| |