1. 原理

  1. 开启监听服务
  2. 连接服务,发送内容

    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; }

  1. // 读取客户端传过来的资源,并转化为字符串
  2. $string = socket_read($clientResource, 1024);
  3. echo 'server receive is :' . $string . PHP_EOL;
  4. if ($string !== false) {
  5. // 向socket_accept的套接流写入信息
  6. $returnClientStr = 'server receive is : ' . $string . PHP_EOL;
  7. socket_write($clientResource, $returnClientStr, strlen($returnClientStr));
  8. } else {
  9. echo 'socket_read is fail';
  10. }
  11. // 关闭socket_create()或者socket_accept()所建立的套接流
  12. socket_close($clientResource);

} while (true); socket_close($socket);

  1. ```php
  2. <?php
  3. // 创建一个socket套接流
  4. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  5. // 接收套接流的最大超时时间1秒,后面是微秒单位超时时间,设置为零,表示不管它
  6. socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));
  7. // 发送套接流的最大超时时间为6秒
  8. socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 6, "usec" => 0));
  9. // 连接服务端的套接流,这一步就是使客户端与服务器端的套接流建立联系
  10. if (socket_connect($socket, '127.0.0.1', 8888) == false) {
  11. echo 'connect fail massege:' . socket_strerror(socket_last_error());
  12. } else {
  13. $message = 'l love you 我爱你 socket';
  14. // 转为GBK编码,处理乱码问题,这要看你的编码情况而定,每个人的编码都不同
  15. // $message = mb_convert_encoding($message,'GBK','UTF-8');
  16. // 向服务端写入字符串信息
  17. if (socket_write($socket, $message, strlen($message)) == false) {
  18. echo 'fail to write' . socket_strerror(socket_last_error());
  19. } else {
  20. echo 'client write success' . PHP_EOL;
  21. //读取服务端返回来的套接流信息
  22. while ($callback = socket_read($socket, 1024)) {
  23. echo 'server return message is:' . PHP_EOL . $callback;
  24. }
  25. }
  26. }
  27. // 关闭套接流
  28. socket_close($socket);