Создание клиент-серверного приложения
Ниже приведен пример, который иллюстрирует реализацию простого сервера, отвечающего на запросы.
В листинге надо изменить адрес и порт. Подключиться к этому серверу можно при помощи простого сетевого клиента, например, командой, telnet 192.168.1.53 10000. Конечно, в ней надо указать верные адрес и порт. Все, что будет посылаться на сервер, будет отображаться и возвращаться клиенту обратно. Для прекращения сеанса связи нужно ввести команду quit.
error_reporting (E_ALL);
/* Позволяет скрипту бесконечно удерживать связь. */
set_time_limit (0);
$address = '192.168.1.53'; /* установите свои значения */
$port = 10000;
if (($sock = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
echo " Ошибка в socket(): " . strerror ($sock) . "\n";
}
if (($ret = bind ($sock, $address, $port)) < 0) {
echo "Ошибка в bind(): " . strerror ($ret) . "\n";
}
if (($ret = listen ($sock, 5)) < 0) {
echo "Ошибка в listen(): " . strerror ($ret) . "\n";
}
do {
if (($msgsock = accept_connect($sock)) < 0) {
echo "Ошибка в accept_connect(): " . strerror ($msgsock) . "\n";
break;
}
do {
$buf = '';
$ret = read ($msgsock, $buf, 2048);
if ($ret < 0) {
echo "Ошибка в read(): " . strerror ($ret) . "\n";
break 2;
}
if ($ret == 0) {
break 2;
}
$buf = trim ($buf);
if ($buf == 'quit') {
close ($msgsock);
break 2;
}
$talkback = "Вы ввели '$buf'.\n";
write ($msgsock, $talkback, strlen ($talkback));
echo "$buf\n";
} while (TRUE);
close ($msgsock);
} while (TRUE);
close ($sock);
Код соответствующего клиентского приложения приведен ниже.
Это приложение получает страницу через HTTP, отправляет запрос HEAD, выводит ответ и завершается.
error_reporting (E_ALL);
echo "<h2>TCP/IP Connection</h2>\n";
/* Получить порт службы WWW (iau?ii: 80). */
$service_port = getservbyname ('www', 'tcp');
/* Получить IP адрес хоста. */
$address = gethostbyname ('www.php.net');
/* Создать TCP/IP socket. */
$socket = socket (AF_INET, SOCK_STREAM, 0);
if ($socket < 0) {
echo "Ошибка в socket(): " . strerror ($socket) . "\n";
}
else {
"socket создан: " . strerror ($socket) . "\n";
}
echo "Попытка подключиться к '$address' (порт '$service_port') ...";
$result = connect ($socket, $address, $service_port);
if ($result < 0) {
echo "Ошибка в connect(): ($result) ". strerror($result) ."\n";
}
else {
echo "OK.\n";
}
$in = "HEAD / HTTP/1.0\r\n\r\n"; // посылаемые данные
$out = ''; // буфер для приема данных
echo "Sending HTTP HEAD request..."; // послать запрос заголовка HTTP
write ($socket, $in, strlen ($in));
echo "OK.\n";
echo "Reading response:\n\n"; // принять ответ (заголовок)
while (read ($socket, $out, 2048)) {
echo $out;
}
echo "Closing socket...";
close ($socket);
echo "OK.\n\n";
.
Прокомментировать/Отблагодарить