Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Создание клиент-серверного приложения
Ниже приведен пример, который иллюстрирует реализацию простого сервера, отвечающего на запросы.
В листинге надо изменить адрес и порт. Подключиться к этому серверу можно при помощи простого сетевого клиента, например, командой, 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";
.
Прокомментировать/Отблагодарить