【socket】用PHP的socket实现客户端到服务端的通信

[php]  view plain  copy
 print ?
  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$msgstrlen($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.                 break 2;  
  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.                 break 2;  
  45.         }  
  46.         if ($buf == 'sun') {  
  47.                 echo'what are you doing?';  
  48.         }  
  49.         $talkback = "Backinformation : '$buf'.\n";  
  50.         socket_write($msgsock$talkbackstrlen($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客户端:

[php]  view plain  copy
 print ?
  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$instrlen($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实现客户端和服务端的通信
client.php
server.php
具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..
再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....

猜你喜欢

转载自blog.csdn.net/professorphp/article/details/76983920