Socket connect: примеры (PHP)
Руководство по работе с socket_connect
Раздел: Сокеты
socket_connect(resource socket, string address [, int port]): boolФункция socket_connect в PHP
Функция socket_connect инициирует соединение с сокетом, используя существующий ресурс сокета, который должен быть создан функцией socket_create. Она применяется для сетевого взаимодействия по различным протоколам.
Аргументы функции
- $socket (обязательный) - ресурс сокета, созданный с помощью
socket_create. - $address (обязательный) - IP-адрес или путь к доменному сокету Unix, к которому выполняется подключение.
- $port (опциональный) - номер порта для сетевых сокетов. Для доменных сокетов Unix этот параметр должен быть указан как 0.
Примеры использования socket_connect
Подключение к TCP-серверу
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "Ошибка создания сокета: " . socket_strerror(socket_last_error());
} else {
$result = socket_connect($socket, '127.0.0.1', 8080);
if ($result === false) {
echo "Ошибка подключения: " . socket_strerror(socket_last_error($socket));
} else {
echo "Подключение установлено";
}
socket_close($socket);
}
?>Подключение установлено
Использование с IPv6
<?php
$socket = socket_create(AF_INET6, SOCK_STREAM, SOL_TCP);
if ($socket) {
$result = socket_connect($socket, '::1', 8080);
if ($result) {
echo "Успешное подключение по IPv6";
}
socket_close($socket);
}
?>Альтернативные функции в PHP
fsockopen - открывает соединение с сокетом и возвращает файловый указатель. Удобна для простых сетевых операций, но менее гибкая чем socket_connect.
stream_socket_client - создает потоковое подключение к удаленному серверу. Поддерживает SSL и асинхронные операции.
Аналоги в других языках
Socket connect в Python
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 8080))JavaScript (Node.js)
const net = require('net');
const client = net.createConnection({ port: 8080, host: '127.0.0.1' }, () => {
console.log('Подключено');
});Типичные ошибки
Неверный тип сокета
<?php
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$result = socket_connect($socket, '127.0.0.1', 8080);
// Для UDP сокетов подключение может не требоваться
?>Таймаут подключения
<?php
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, ['sec' => 5, 'usec' => 0]);
$result = socket_connect($socket, '192.168.1.100', 9999);
if ($result === false) {
echo "Таймаут подключения";
}
?>Изменения в PHP 8
В PHP 8 функция socket connect не претерпела значительных изменений. Однако улучшена обработка ошибок - многие функции сокетов теперь выбрасывают исключения Error при неудаче.
Расширенные примеры
Подключение с таймаутом
Пример php
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec' => 10, 'usec' => 0]);
$result = @socket_connect($socket, 'example.com', 80);
if ($result) {
$http = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
socket_write($socket, $http);
echo socket_read($socket, 2048);
}
?>Использование Unix сокетов
Пример php
<?php
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_connect($socket, '/tmp/mysocket.sock', 0);
?>PHP socket_connect function comments
En
Socket connect Initiates a connection on a socket