php实现tcp
PHP 实现 TCP 通信
使用 stream_socket_server 创建 TCP 服务器
以下是一个简单的 TCP 服务器实现,监听本地端口并接收客户端连接:

$host = '127.0.0.1';
$port = 12345;
// 创建 TCP 服务器
$server = stream_socket_server("tcp://$host:$port", $errno, $errstr);
if (!$server) {
die("Error: $errstr ($errno)");
}
echo "Server listening on $host:$port\n";
while (true) {
// 接受客户端连接
$client = stream_socket_accept($server);
if ($client) {
// 读取客户端数据
$data = fread($client, 1024);
echo "Received: $data\n";
// 发送响应
fwrite($client, "Hello from server!\n");
// 关闭连接
fclose($client);
}
}
使用 fsockopen 创建 TCP 客户端
以下是一个简单的 TCP 客户端实现,连接到服务器并发送数据:

$host = '127.0.0.1';
$port = 12345;
// 创建 TCP 连接
$client = fsockopen($host, $port, $errno, $errstr, 30);
if (!$client) {
die("Error: $errstr ($errno)");
}
// 发送数据
fwrite($client, "Hello from client!\n");
// 接收响应
$response = fread($client, 1024);
echo "Server response: $response\n";
// 关闭连接
fclose($client);
使用 socket_* 函数实现更底层的 TCP 通信
如果需要更底层的控制,可以使用 PHP 的 socket_* 函数:
// 创建服务器
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '127.0.0.1', 12345);
socket_listen($socket);
echo "Server listening on 127.0.0.1:12345\n";
while (true) {
$client = socket_accept($socket);
$data = socket_read($client, 1024);
echo "Received: $data\n";
socket_write($client, "Hello from server!\n");
socket_close($client);
}
异步 TCP 服务器实现
使用 stream_select 实现异步 TCP 服务器:
$host = '127.0.0.1';
$port = 12345;
$server = stream_socket_server("tcp://$host:$port");
$clients = [$server];
while (true) {
$read = $clients;
$write = $except = null;
if (stream_select($read, $write, $except, 0)) {
foreach ($read as $socket) {
if ($socket === $server) {
$client = stream_socket_accept($server);
$clients[] = $client;
echo "New client connected\n";
} else {
$data = fread($socket, 1024);
if ($data === false || $data === '') {
fclose($socket);
unset($clients[array_search($socket, $clients)]);
echo "Client disconnected\n";
} else {
echo "Received: $data\n";
fwrite($socket, "Echo: $data\n");
}
}
}
}
}
注意事项
- PHP 的 TCP 实现通常用于简单的网络通信,不适合高并发场景
- 生产环境建议使用专门的服务器软件如 Nginx 或 Apache 处理 TCP 连接
- 长时间运行的 PHP 脚本需要注意内存泄漏问题
- 需要考虑错误处理和连接超时等边界情况






