php实现tcp
PHP 实现 TCP 通信
PHP 可以通过 socket 扩展或 stream 函数实现 TCP 通信。以下是两种方法的详细说明:
使用 socket 扩展实现 TCP 服务器
创建 TCP 服务器需要监听指定端口并处理客户端连接:

$host = '0.0.0.0';
$port = 8080;
// 创建 socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);
echo "Server listening on $host:$port\n";
while (true) {
$client = socket_accept($socket);
$message = socket_read($client, 1024);
echo "Received: $message\n";
$response = "Hello, Client!";
socket_write($client, $response, strlen($response));
socket_close($client);
}
socket_close($socket);
使用 socket 扩展实现 TCP 客户端
客户端需要连接到服务器并发送数据:
$host = '127.0.0.1';
$port = 8080;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $host, $port);
$message = "Hello, Server!";
socket_write($socket, $message, strlen($message));
$response = socket_read($socket, 1024);
echo "Server response: $response\n";
socket_close($socket);
使用 stream 函数实现 TCP 服务器
PHP 的 stream_socket_server 和 stream_socket_accept 也可以实现 TCP 通信:

$host = '0.0.0.0';
$port = 8080;
$server = stream_socket_server("tcp://$host:$port", $errno, $errstr);
if (!$server) {
die("Error: $errstr ($errno)");
}
echo "Server listening on $host:$port\n";
while ($client = stream_socket_accept($server)) {
$data = fread($client, 1024);
echo "Received: $data\n";
fwrite($client, "Hello, Client!");
fclose($client);
}
fclose($server);
使用 stream 函数实现 TCP 客户端
客户端可以使用 stream_socket_client 连接服务器:
$host = '127.0.0.1';
$port = 8080;
$client = stream_socket_client("tcp://$host:$port", $errno, $errstr);
if (!$client) {
die("Error: $errstr ($errno)");
}
fwrite($client, "Hello, Server!");
$response = fread($client, 1024);
echo "Server response: $response\n";
fclose($client);
注意事项
- 确保 PHP 安装时启用了
socket扩展(默认已启用)。 - 服务器和客户端需要运行在同一网络或可访问的 IP 上。
- 处理多客户端连接时,建议使用多线程或异步 I/O(如
stream_select)。 - 生产环境中应加入错误处理和超时机制。
示例:多客户端处理
使用 stream_select 处理多个客户端连接:
$host = '0.0.0.0';
$port = 8080;
$server = stream_socket_server("tcp://$host:$port");
$clients = [$server];
while (true) {
$read = $clients;
if (stream_select($read, $write, $except, 0) > 0) {
if (in_array($server, $read)) {
$client = stream_socket_accept($server);
$clients[] = $client;
unset($read[array_search($server, $read)]);
}
foreach ($read as $client) {
$data = fread($client, 1024);
if ($data === false || $data === '') {
fclose($client);
unset($clients[array_search($client, $clients)]);
continue;
}
echo "Received: $data\n";
fwrite($client, "ACK: $data");
}
}
}
以上方法提供了 PHP 实现 TCP 通信的基本框架,可根据实际需求扩展功能。






