• php编写TCP服务端和客户端程序


    From: http://blog.csdn.net/anda0109/article/details/46655301

    1、修改php.ini,打开extension=php_sockets.dll

    2、服务端程序SocketServer.php

    1. <?php    
    2. //确保在连接客户端时不会超时     
    3. set_time_limit(0);    
    4. //设置IP和端口号     
    5. $address = "127.0.0.1";    
    6. $port = 3046;   
    7. /**  
    8.  * 创建一个SOCKET   
    9.  * AF_INET=是ipv4 如果用ipv6,则参数为 AF_INET6  
    10.  * SOCK_STREAM为socket的tcp类型,如果是UDP则使用SOCK_DGRAM  
    11. */    
    12. $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() fail:" . socket_strerror(socket_last_error()) . "/n");    
    13. //阻塞模式     
    14. socket_set_block($sock) or die("socket_set_block() fail:" . socket_strerror(socket_last_error()) . "/n");    
    15. //绑定到socket端口     
    16. $result = socket_bind($sock, $address, $port) or die("socket_bind() fail:" . socket_strerror(socket_last_error()) . "/n");    
    17. //开始监听     
    18. $result = socket_listen($sock, 4) or die("socket_listen() fail:" . socket_strerror(socket_last_error()) . "/n");    
    19. echo "OK Binding the socket on $address:$port ... ";    
    20. echo "OK Now ready to accept connections. Listening on the socket ...  ";    
    21. do { // never stop the daemon     
    22.     //它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息     
    23.     $msgsock = socket_accept($sock) or  die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");    
    24.     while(1){  
    25.         //读取客户端数据     
    26.         echo "Read client data  ";    
    27.         //socket_read函数会一直读取客户端数据,直到遇见 , 或者字符.PHP脚本把这写字符看做是输入的结束符.     
    28.         $buf = socket_read($msgsock, 8192);    
    29.         echo "Received msg: $buf    ";  
    30.   
    31.         if($buf == "bye"){  
    32.             //接收到结束消息,关闭连接,等待下一个连接   
    33.             socket_close($msgsock);  
    34.             continue;  
    35.         }  
    36.             
    37.         //数据传送 向客户端写入返回结果     
    38.         $msg = "welcome  ";    
    39.         socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");            
    40.     }    
    41.         
    42. while (true);    
    43. socket_close($sock);    
    44. ?>  
    
    
    3、客户端程序SocketClient.php
    1. <?php    
    2. set_time_limit(0);    
    3.     
    4. $host = "127.0.0.1";    
    5. $port = 3046;    
    6. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create  socket ");    
    7.      
    8. $connection = socket_connect($socket, $host, $port) or die("Could not connet server ");   
    9. socket_write($socket, "hello socket") or die("Write failed ");  
    10. while ($buff = socket_read($socket, 1024, PHP_NORMAL_READ)) {    
    11.     echo("Response was:" . $buff . " ");  
    12.     echo("input what you want to say to the server: ");  
    13.     $text = fgets(STDIN);  
    14.     socket_write($socket, $text);  
    15. }    
    16. socket_close($socket);  
    17. ?>  

    4、测试

          运行服务端程序:C:wampinphpphp5.4.16php.exe C:wampwwwSocketServer.php

         运行客户端程序: C:wampinphpphp5.4.16php.exe C:wampwwwSocketClient.php

    5、其流程与C很相似,实际上就是封装了C的socket。

  • 相关阅读:
    efibootmgr命令
    GPT+UEFI双系统引导
    关于元类的一些使用心得
    队列的数组实现
    队列的链表实现
    栈的链表实现
    栈的数组实现
    单链表实现基数排序
    多项式ADT加法乘法——单链表实现
    LeetCode: 476 Number Complement(easy)
  • 原文地址:https://www.cnblogs.com/joeblackzqq/p/5014825.html
Copyright © 2020-2023  润新知