【socket】用PHP的socket實現客戶端到服務端的通訊

1、server.php服務端:php

[php]  view plain copy
  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. ?>  

2、client.php客戶端:

[php]  view plain copy
  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,會獲得服務端的迴應....
相關文章
相關標籤/搜索