php实现tcp
PHP 实现 TCP 通信
PHP 可以通过 socket 扩展实现 TCP 通信,包括客户端和服务端的开发。以下是具体实现方法。
TCP 服务端实现
创建一个 TCP 服务端需要监听指定端口并处理客户端连接:
<?php
// 创建 socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() failed: " . socket_strerror(socket_last_error()));
}
// 绑定 IP 和端口
$bind = socket_bind($socket, '0.0.0.0', 8080);
if ($bind === false) {
die("socket_bind() failed: " . socket_strerror(socket_last_error()));
}
// 开始监听
$listen = socket_listen($socket, 5);
if ($listen === false) {
die("socket_listen() failed: " . socket_strerror(socket_last_error()));
}
echo "Server started on port 8080\n";
// 接受客户端连接
while (true) {
$client = socket_accept($socket);
if ($client === false) {
echo "socket_accept() failed: " . socket_strerror(socket_last_error());
continue;
}
// 读取客户端数据
$input = socket_read($client, 1024);
echo "Received: " . $input . "\n";
// 发送响应
$output = "Hello Client!";
socket_write($client, $output, strlen($output));
// 关闭客户端连接
socket_close($client);
}
// 关闭服务端 socket
socket_close($socket);
?>
TCP 客户端实现
创建一个 TCP 客户端用于连接服务端并发送数据:
<?php
// 创建 socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() failed: " . socket_strerror(socket_last_error()));
}
// 连接服务端
$connect = socket_connect($socket, '127.0.0.1', 8080);
if ($connect === false) {
die("socket_connect() failed: " . socket_strerror(socket_last_error()));
}
// 发送数据
$message = "Hello Server!";
socket_write($socket, $message, strlen($message));
// 接收响应
$response = socket_read($socket, 1024);
echo "Server response: " . $response . "\n";
// 关闭 socket
socket_close($socket);
?>
使用 stream_socket 实现
除了 socket 扩展,还可以使用 stream_socket 函数实现 TCP 通信:
服务端示例:
<?php
$server = stream_socket_server("tcp://0.0.0.0:8080", $errno, $errstr);
if (!$server) {
die("$errstr ($errno)");
}
echo "Server started on port 8080\n";
while ($client = stream_socket_accept($server)) {
$input = fread($client, 1024);
echo "Received: " . $input . "\n";
$output = "Hello Client!";
fwrite($client, $output);
fclose($client);
}
fclose($server);
?>
客户端示例:
<?php
$client = stream_socket_client("tcp://127.0.0.1:8080", $errno, $errstr);
if (!$client) {
die("$errstr ($errno)");
}
fwrite($client, "Hello Server!");
$response = fread($client, 1024);
echo "Server response: " . $response . "\n";
fclose($client);
?>
注意事项
- 确保 PHP 已启用
socket扩展(检查php.ini中extension=sockets是否取消注释)。 - 服务端和客户端的 IP 和端口需一致。
- 处理异常情况,如连接失败或读写错误。
- 多客户端并发时,服务端需使用多线程或非阻塞模式(如
socket_set_nonblock)。
通过以上方法,可以轻松实现 PHP 的 TCP 通信功能。







