🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# socket_accept * * * * * 说明: > 接受一个套接字连接,成功返回一个新的套接字的信息资源,失败返回false 语法: ~~~ resource socket_accept ( resource $socket ) ~~~ 参数: | 参数 | 描述 | | --- | --- | | socket | 一个由 socket_create() 创建的有效的资源套接字 | 返回值: | 成功 | 失败 | | --- | --- | | 返回一个新的socket套接字资源 (resource数据类型) | false | 技术细节: PHP版本:PHP 4 >= 4.1.0, PHP 5, PHP 7 实例: 服务端代码 server.php ~~~ //创建服务端的socket套接流,net协议为IPv4,protocol协议为TCP if (!$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) { echo ("create socket 失败: " . socket_strerror(socket_last_error()) and socket_clear_error()); exit; } /*给socket绑定主机和端口(设置socket套接字资源地址),这样客户端才能通过主机和端口连接*/ socket_bind($socket, '127.0.0.1', '8080'); //监听套接流 socket_listen($socket); // 获取服务端的 地址 和端口 socket_getsockname($sockets[0], $addr, $port); echo '服务端ip:' . ($addr) . PHP_EOL; echo '服务端端口:' . ($port) . PHP_EOL; //设置套接流为非阻塞 socket_set_nonblock($socket); //循环,让服务器无限获取客户端传过来的信息 while (true) { //接受套接字连接 成功返回一个新的socket套接流 if (($new_socket = socket_accept($socket)) !== false) { // 获取客户端的 地址 和端口 socket_getpeername($new_socket, $addr, $port); echo '客户端ip:' . ($addr) . PHP_EOL; echo '客户端端口:' . ($port) . PHP_EOL; //读取客户端传过来的资源,并转化为字符串 $string = socket_read($new_socket, 1024); echo '客户端发来信息:' . $string . PHP_EOL;//PHP_EOL为php的换行预定义常量 if ($string != false) { // 返回给客户端的信息 $return_message = 'hello,我来自服务器端' . PHP_EOL; // 向socket_accept的套接流写入信息 socket_write($new_socket, $return_message, strlen($return_message)); //关闭socket_create()或者socket_accept()所建立的套接流 socket_close($new_socket); } } } socket_close($socket); ~~~ 客户端代码 client.php ~~~ //创建一个socket套接流 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //连接上面服务端的套接流 if (socket_connect($socket, '127.0.0.1', '8080') == false) { echo '连接失败信息:' . socket_strerror(socket_last_error()); } else { $message = 'hello ,我是客户端'; //向服务端写入字符串信息 if (socket_write($socket, $message, strlen($message)) == false) { echo '写入失败信息:' . socket_strerror(socket_last_error()) and socket_clear_error(); } else { echo '客户端发送信息成功' . PHP_EOL; //读取服务端返回来的套接流信息 while ($callback = socket_read($socket, 1024)) { echo '服务端返回的信息是:' . PHP_EOL . $callback; } } } socket_close($socket);//工作完毕,关闭套接流 ~~~ 打开windows的cmd窗口,然后,运行php server.php 再打开另外一个cmd窗口 ,然后,运行php client.php 服务端信息: ![](https://box.kancloud.cn/69d4077d8796f1c12e9f412de57f6447_498x50.png) 客户端信息: ![](https://box.kancloud.cn/db6b6ef2f1a3c24858044602ba2b209a_479x81.png) 注: 1、windows中需要把 php这个运行命名 加入环境变量中 2、需要在php.ini 开启extension=sockets 模块 资料来源: http://php.net/manual/zh/book.sockets.php https://www.cnblogs.com/loveyoume/p/6076101.html