php的socket通信
封面图
•
2025-11-19
•
PHP
234
0
0
0
PHP 中的 **Socket 通信** 是一种用于实现网络通信的技术,可以用于创建客户端与服务器之间的连接。它通常用于开发 TCP 或 UDP 协议的通信程序。 --- ## ✅ PHP Socket 基本概念 - **Socket**:是网络通信的基本单元,可以理解为一个端点。 - **TCP(Transmission Control Protocol)**:面向连接的协议,保证数据的完整性和顺序。 - **UDP(User Datagram Protocol)**:无连接的协议,速度快但不保证可靠性。 --- ## 🔧 1. 创建 TCP 服务器(PHP) ```php <?php // 设置监听地址和端口 $host = '127.0.0.1'; $port = 8080; // 创建 socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; exit; } // 绑定到本地地址和端口 $result = socket_bind($socket, $host, $port); if ($result === false) { echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($socket)) . "\n"; exit; } // 开始监听 $result = socket_listen($socket); if ($result === false) { echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($socket)) . "\n"; exit; } echo "Server is listening on $host:$port...\n"; // 接受连接 $client = socket_accept($socket); if ($client === false) { echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($socket)) . "\n"; exit; } // 读取客户端发送的数据 $data = socket_read($client, 1024); echo "Received: " . $data . "\n"; // 发送响应给客户端 $response = "Hello from server!"; socket_write($client, $response, strlen($response)); // 关闭连接 socket_close($client); socket_close($socket); ?> ``` --- ## 📡 2. 创建 TCP 客户端(PHP) ```php <?php $host = '127.0.0.1'; $port = 8080; // 创建 socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; exit; } // 连接到服务器 $result = socket_connect($socket, $host, $port); if ($result === false) { echo "socket_connect() failed: reason: " . socket_strerror(socket_last_error($socket)) . "\n"; exit; } // 发送数据 $message = "Hello from client!"; socket_write($socket, $message, strlen($message)); // 读取服务器响应 $response = socket_read($socket, 1024); echo "Server says: " . $response . "\n"; // 关闭连接 socket_close($socket); ?> ``` --- ## 🌐 3. 创建 UDP 服务器(PHP) ```php <?php $host = '127.0.0.1'; $port = 8081; $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); if ($socket === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; exit; } socket_bind($socket, $host, $port); echo "UDP Server is listening on $host:$port...\n"; while (true) { // 接收数据 socket_recvfrom($socket, $data, 1024, 0, $remote_ip, $remote_port); echo "Received from $remote_ip:$remote_port: $data\n"; // 回复 $response = "Echo: $data"; socket_sendto($socket, $response, strlen($response), 0, $remote_ip, $remote_port); } ?> ``` --- ## 📱 4. 创建 UDP 客户端(PHP) ```php <?php $host = '127.0.0.1'; $port = 8081; $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); if ($socket === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; exit; } $message = "UDP message from client!"; socket_sendto($socket, $message, strlen($message), 0, $host, $port); // 接收服务器回复 socket_recvfrom($socket, $response, 1024, 0, $remote_ip, $remote_port); echo "Server replied: " . $response . "\n"; socket_close($socket); ?> ``` --- ## ⚠️ 注意事项 - PHP 的 `socket_*` 函数需要启用 `sockets` 扩展(默认开启)。 - 在生产环境中,建议使用更高级的框架(如 Swoole、ReactPHP)来处理高并发的网络请求。 - 使用 `socket_read()` 和 `socket_write()` 时要注意缓冲区大小和数据完整性。 --- ## 🧠 小技巧 - 如果你只是测试,可以使用 `telnet` 或 `nc` 工具进行简单测试: ```bash telnet 127.0.0.1 8080 ``` --- 如果你有具体的应用场景(比如聊天室、文件传输、实时推送等),我可以为你提供更详细的代码示例。欢迎继续提问!
上一篇:
thinkphp5 三种重定向(跳转)
下一篇:
正版phpstorm免费激活步骤(图文详解)
标题录入,一次不能超过6条
留言
评论