Chinaunix首页 | 论坛 | 博客
  • 博客访问: 328222
  • 博文数量: 84
  • 博客积分: 886
  • 博客等级: 准尉
  • 技术积分: 769
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-30 19:32
文章分类

全部博文(84)

文章存档

2018年(1)

2017年(2)

2014年(1)

2013年(50)

2012年(30)

我的朋友

分类: PHP

2013-08-07 16:09:37

首先查看phpinfo()是否开启了socket。
代码方面包括一个server端和一个客户端:

1、server端(server.php)
  1. <?php
  2. error_reporting(E_ALL & ~E_NOTICE);
  3. set_time_limit(0);
  4. //ob_implicit_flush();

  5. $address = '127.0.0.1';
  6. $port = 10005;
  7. //创建端口
  8. if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
  9.         echo "socket_create() failed :reason:" . socket_strerror(socket_last_error()) . "\n";
  10. }

  11. //绑定
  12. if (socket_bind($sock, $address, $port) === false) {
  13.         echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";
  14. }

  15. //监听
  16. if (socket_listen($sock, 5) === false) {
  17.         echo "socket_listen() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";
  18. }

  19. do {
  20.         //得到一个链接
  21.         if (($msgsock = socket_accept($sock)) === false) {
  22.                 echo "socket_accept() failed :reason:".socket_strerror(socket_last_error($sock)) . "\n";
  23.                 break;
  24.         }
  25.         $sendmessage = socket_read($msgsock, 8192);
  26.         echo "message : <$sendmessage> from client\n";


  27.         $msg = "welcome to socket server";
  28.         socket_write($msgsock, $msg, strlen($msg));
  29.         socket_close($msgsock);
  30. } while(true);
  31. //关闭socket
  32. socket_close($sock)

2、客户端(client.php)

  1. <?php
  2. //error_reporting(E_ALL);
  3. $service_port = 10005;
  4. $address = '127.0.0.1';

  5. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  6. if ($socket === false) {
  7.         echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
  8. }
  9. $result = socket_connect($socket, $address, $service_port);
  10. if($result === false) {
  11.         echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
  12. }
  13. $in = "hello socket server";
  14. socket_write($socket, $in, strlen($in));

  15. echo "Reading response:\n";
  16. while ($out = socket_read($socket, 8192)) {
  17.         echo $out."\n";
  18. }
  19. socket_close($socket)

在服务端用cli方式执行。然后执行客户端,就可以进行socket交互了。
要是服务器间请求,注意下端口是否开启,服务器间网络是否畅通。

阅读(911) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~