• 【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,会得到服务端的回应....
  • 相关阅读:
    C#中IPAddress转换成整型int
    没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
    VB.NET或C#报错:You must hava a license to use this ActiveX control.
    c#几种随机数组和数组乱序
    C#封装的websocket协议类
    VB生成条形码(EAN-13)
    VB控件间的拖放
    VB用API模拟截屏键PrintScreen
    VB读写进程的内存
    几个VB常见又内涵的错误
  • 原文地址:https://www.cnblogs.com/sunscheung/p/4839454.html
Copyright © 2020-2023  润新知