zoukankan      html  css  js  c++  java
  • 【socket】用PHP的socket实现客户端到服务端的通信

    一、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) . " ";  
    12. }  
    13.   
    14. if (($ret = socket_bind($sock$address$port)) < 0) {  
    15.         echo "创建套接字失败原因 " . socket_strerror($ret) . " ";  
    16. }  
    17. //监听  
    18. if (($ret = socket_listen($sock, 5)) < 0) {  
    19.         echo "监听失败原因 " . socket_strerror($ret) . " ";  
    20. }  
    21. do {  
    22.     //接收命令   
    23.     if (($msgsock = @socket_accept($sock)) < 0) {  
    24.         echo "命令接收失败原因: " . socket_strerror($msgsock) . " ";  
    25.         break;  
    26.     }  
    27.     $msg = " PHP Test Server.  " ."用quit,shutdown,sun...等命令测试. ";  
    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) . " ";  
    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'. ";  
    50.         socket_write($msgsock$talkbackstrlen($talkback));  
    51.         echo "$buf ";  
    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) . " ";  
    11. else {  
    12.         echo "OK,HE HE. ";  
    13. }  
    14. $result = socket_connect($socket$address$service_port);  
    15. if ($result < 0) {  
    16.         echo "SOCKET连接失败原因: ($result) " . socket_strerror($result) . " ";  
    17. else {  
    18.         echo "OK. ";  
    19. }  
    20. //发送命令  
    21. $in = "HEAD / HTTP/1.1 ";  
    22. $in .= "Connection: Close ";  
    23. $out = '';  
    24. echo "Send Command..........";  
    25. $in = "sun ";  
    26. socket_write($socket$instrlen($in));  
    27. echo "OK. ";  
    28. echo "Reading Backinformatin: ";  
    29. while ($out = socket_read($socket, 2048)) {  
    30.         echo $out;  
    31. }  
    32. echo "Close socket........";  
    33. socket_close($socket);  
    34. echo "OK,He He. ";  
    35. ?>  

    这两段代码是简单介绍用PHP实现客户端和服务端的通信
    client.php
    server.php
    具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..
    再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....
  • 相关阅读:
    Python中所有的关键字
    关于selenium的8种元素定位
    对提示框的操作
    selenium+webservice进行百度登录
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled...报错解决
    Vue中使用echarts
    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142解决方法
    插入排序
    冒泡排序优化
    roject 'org.springframework.boot:spring-boot-starter-parent:XXX' not found 解决
  • 原文地址:https://www.cnblogs.com/sunscheung/p/4839454.html
Copyright © 2011-2022 走看看