加入收藏 | 设为首页 | 会员中心 | 我要投稿 阳江站长网 (https://www.0662zz.cn/)- 办公协同、云通信、区块链、物联平台、高性能计算!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP如何实现简单的Socket

发布时间:2022-06-30 09:40:12 所属栏目:PHP教程 来源:互联网
导读:PHP如何实现简单的Socket 首先使用PHP制作的Socket服务端,其主要是设置Socket的IP地址及端口号;然后监听端口,如果有客户端连接的话,则接收连接请求和数据,最后处理数据并且返回数据即可。 示例代码: ?php //确保在连接客户端时不会超时 set_time_limit
  PHP如何实现简单的Socket
 
  首先使用PHP制作的Socket服务端,其主要是设置Socket的IP地址及端口号;然后监听端口,如果有客户端连接的话,则接收连接请求和数据,最后处理数据并且返回数据即可。
 
  示例代码:
 
  <?php
   
  //确保在连接客户端时不会超时
   
  set_time_limit(0);
   
  //设置IP和端口号
   
  $address = "127.0.0.1";
   
  $port = 2048; //调试的时候,可以多换端口来测试程序!
   
  /**
   
   * 创建一个SOCKET  
   
   * AF_INET=是ipv4 如果用ipv6,则参数为 AF_INET6
   
   * SOCK_STREAM为socket的tcp类型,如果是UDP则使用SOCK_DGRAM
   
  */
   
  $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
   
  //阻塞模式
   
  socket_set_block($sock) or die("socket_set_block() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
   
  //绑定到socket端口
   
  $result = socket_bind($sock, $address, $port) or die("socket_bind() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
   
  //开始监听
   
  $result = socket_listen($sock, 4) or die("socket_listen() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
   
  echo "OKnBinding the socket on $address:$port ... ";
   
  echo "OKnNow ready to accept connections.nListening on the socket ... n";
   
  do { // never stop the daemon
   
   //它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息
   
   $msgsock = socket_accept($sock) or die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");
   
     
   
   //读取客户端数据
   
   echo "Read client data n";
   
   //socket_read函数会一直读取客户端数据,直到遇见n,t或者字符.PHP脚本把这写字符看做是输入的结束符.
   
   $buf = socket_read($msgsock, 8192);
   
   echo "Received msg: $buf n";
   
     
   
   //数据传送 向客户端写入返回结果
   
   $msg = "welcome n";
   
   socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");
   
   //一旦输出被返回到客户端,父/子socket都应通过socket_close($msgsock)函数来终止
   
   socket_close($msgsock);
   
  } while (true);
   
  socket_close($sock);
 

(编辑:阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读