首页 > 开发 > PHP > 正文

用PHP的socket实现客户端到服务端的通信实例详解

2024-05-04 22:01:03
字体:大 中 小
来源:转载
供稿:网友

一、server.php服务端:

  1. <?php 
  2. error_reporting(E_ALL); 
  3. set_time_limit(0); 
  4. ob_implicit_flush(); 
  5. //本地IP 
  6. $address='localhost'; 
  7. //设置用111端口进行通信 
  8. $port= 111; 
  9. //创建SOCKET 
  10. if(($sock= socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) { 
  11.     echo"socket创建失败原因 ". socket_strerror($sock) ."/n"; 
  12. } 
  13.    
  14. if(($ret= socket_bind($sock,$address,$port)) < 0) { 
  15.     echo"创建套接字失败原因 ". socket_strerror($ret) ."/n"; 
  16. } 
  17. //监听 
  18. if(($ret= socket_listen($sock, 5)) < 0) { 
  19.     echo"监听失败原因 ". socket_strerror($ret) ."/n"; 
  20. } 
  21. do{ 
  22.   //接收命令  
  23.   if(($msgsock= @socket_accept($sock)) < 0) { 
  24.     echo"命令接收失败原因: ". socket_strerror($msgsock) ."/n"; 
  25.     break; 
  26.   } 
  27.   $msg="/nPHP Test Server. /n"."用quit,shutdown,sun...等命令测试./n"; 
  28.    
  29.   @socket_write($msgsock,$msg,strlen($msg)); 
  30.    
  31.   do{ 
  32.     if(false === ($buf= @socket_read($msgsock, 2048, PHP_NORMAL_READ))) { 
  33.         echo"socket_read() failed: reason: ". socket_strerror($ret) ."/n"; 
  34.         break2; 
  35.     } 
  36.     if(!$buf= trim($buf)) { 
  37.         continue; 
  38.     } 
  39.     if($buf=='quit') { 
  40.         break; 
  41.     } 
  42.     if($buf=='shutdown') { 
  43.         socket_close($msgsock); 
  44.         break2; 
  45.     } 
  46.     if($buf=='sun') { 
  47.         echo'what are you doing?'; 
  48.     } 
  49.     $talkback="Backinformation : '$buf'./n"; 
  50.     socket_write($msgsock,$talkback,strlen($talkback)); 
  51.     echo"$buf/n"; 
  52.   }while(true); 
  53.    
  54.   socket_close($msgsock); 
  55.    
  56. }while(true); 
  57.    
  58. socket_close($sock); 
  59. ?> 

二、client.php客户端:

  1. <?php 
  2. error_reporting(E_ALL); 
  3. //端口111 
  4. $service_port= 111; 
  5. //本地 
  6. $address='localhost'; 
  7. //创建 TCP/IP socket 
  8. $socket= socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
  9. if($socket< 0) { 
  10.     echo"socket创建失败原因: ". socket_strerror($socket) ."/n"; 
  11. }else{ 
  12.     echo"OK,HE HE./n"; 
  13. } 
  14. $result= socket_connect($socket,$address,$service_port); 
  15. if($result< 0) { 
  16.     echo"SOCKET连接失败原因: ($result) ". socket_strerror($result) ."/n"; 
  17. }else{ 
  18.     echo"OK./n"; 
  19. } 
  20. //发送命令 
  21. $in="HEAD / HTTP/1.1/r/n"; 
  22. $in.="Connection: Close/r/n/r/n"; 
  23. $out=''; 
  24. echo"Send Command.........."; 
  25. $in="sun/n"; 
  26. socket_write($socket,$in,strlen($in)); 
  27. echo"OK./n"; 
  28. echo"Reading Backinformatin:/n/n"; 
  29. while($out= socket_read($socket, 2048)) { 
  30.     echo$out; 
  31. } 
  32. echo"Close socket........"; 
  33. socket_close($socket); 
  34. echo"OK,He He./n/n"; 
  35. ?> 

这两段代码是简单介绍用PHP实现客户端和服务端的通信

具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..

再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表