php实现tcp连接
PHP 实现 TCP 连接
使用 socket_create 和 socket_connect 函数
创建一个 TCP 客户端连接需要使用 socket_create 和 socket_connect 函数。以下是一个简单的示例:
$host = '127.0.0.1';
$port = 8080;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("Socket creation failed: " . socket_strerror(socket_last_error()));
}
$connected = socket_connect($socket, $host, $port);
if ($connected === false) {
die("Connection failed: " . socket_strerror(socket_last_error()));
}
echo "Connected to {$host}:{$port}\n";
socket_close($socket);
使用 stream_socket_client 函数
另一种更简单的方法是使用 stream_socket_client 函数:
$host = '127.0.0.1';
$port = 8080;
$socket = stream_socket_client("tcp://{$host}:{$port}", $errno, $errstr, 30);
if (!$socket) {
die("Connection failed: {$errstr} ({$errno})");
}
echo "Connected to {$host}:{$port}\n";
fclose($socket);
发送和接收数据
在建立连接后,可以使用 socket_write 和 socket_read 或 fwrite 和 fread 来发送和接收数据:
$message = "Hello, Server!";
// 使用 socket_write 发送数据
socket_write($socket, $message, strlen($message));
// 使用 socket_read 接收数据
$response = socket_read($socket, 1024);
echo "Server response: {$response}\n";
// 或者使用 fwrite 和 fread
fwrite($socket, $message);
$response = fread($socket, 1024);
echo "Server response: {$response}\n";
创建 TCP 服务器
如果需要创建一个 TCP 服务器,可以使用以下代码:
$host = '127.0.0.1';
$port = 8080;
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($server, $host, $port);
socket_listen($server);
echo "Server listening on {$host}:{$port}\n";
$client = socket_accept($server);
$message = "Hello, Client!";
socket_write($client, $message, strlen($message));
socket_close($client);
socket_close($server);
使用 stream_socket_server 创建服务器
另一种方法是使用 stream_socket_server:
$host = '127.0.0.1';
$port = 8080;
$server = stream_socket_server("tcp://{$host}:{$port}", $errno, $errstr);
if (!$server) {
die("Server creation failed: {$errstr} ({$errno})");
}
echo "Server listening on {$host}:{$port}\n";
$client = stream_socket_accept($server);
fwrite($client, "Hello, Client!\n");
fclose($client);
fclose($server);
注意事项
- 确保 PHP 已启用
sockets扩展(可通过php -m查看)。 - 防火墙或安全组可能会阻止 TCP 连接,需确保端口开放。
- 处理网络错误时,应检查函数返回值并适当处理异常。







