1. 原理
- 开启监听服务
- 连接服务,发送内容
2. 实现
```php <?php // 创建服务端的socket套接流,net协议为IPv4,protocol协议为TCP $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// 绑定接收的套接流主机和端口,与客户端相对应 if (socket_bind($socket, ‘127.0.0.1’, 8888) == false) { echo ‘server bind fail:’ . socket_strerror(socket_last_error()); }
//监听套接流 if (socket_listen($socket, 4) == false) { echo ‘server listen fail:’ . socket_strerror(socket_last_error()); }
// 监听 do { // 接收客户端传过来的信息 $clientResource = socket_accept($socket); if ($clientResource === false) { continue; }
// 读取客户端传过来的资源,并转化为字符串$string = socket_read($clientResource, 1024);echo 'server receive is :' . $string . PHP_EOL;if ($string !== false) {// 向socket_accept的套接流写入信息$returnClientStr = 'server receive is : ' . $string . PHP_EOL;socket_write($clientResource, $returnClientStr, strlen($returnClientStr));} else {echo 'socket_read is fail';}// 关闭socket_create()或者socket_accept()所建立的套接流socket_close($clientResource);
} while (true); socket_close($socket);
```php<?php// 创建一个socket套接流$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);// 接收套接流的最大超时时间1秒,后面是微秒单位超时时间,设置为零,表示不管它socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));// 发送套接流的最大超时时间为6秒socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 6, "usec" => 0));// 连接服务端的套接流,这一步就是使客户端与服务器端的套接流建立联系if (socket_connect($socket, '127.0.0.1', 8888) == false) {echo 'connect fail massege:' . socket_strerror(socket_last_error());} else {$message = 'l love you 我爱你 socket';// 转为GBK编码,处理乱码问题,这要看你的编码情况而定,每个人的编码都不同// $message = mb_convert_encoding($message,'GBK','UTF-8');// 向服务端写入字符串信息if (socket_write($socket, $message, strlen($message)) == false) {echo 'fail to write' . socket_strerror(socket_last_error());} else {echo 'client write success' . PHP_EOL;//读取服务端返回来的套接流信息while ($callback = socket_read($socket, 1024)) {echo 'server return message is:' . PHP_EOL . $callback;}}}// 关闭套接流socket_close($socket);
