PHP 如何进行socket套节字的连接-php教程

资源魔 40 0
socket通常也称作"套接字",用于形容IP地点以及端口 , 是一个通讯链的句柄。使用顺序通常经过“套接字”先效劳器收回申请或许应对网络申请。本文次要讲述的是正在PHP中套节字之间的衔接进程,具备肯定的参考代价,感兴味的冤家能够学习理解一下。

依据链接启动的形式和内陆套接字要衔接的指标 , 套节字之间的衔接进程能够分为三个步骤:

一、效劳器监听:是效劳器端套接字其实不定位详细的客户端套接字 , 而是处于期待衔接的状态 ,及时监控网络状态。

二、客户端申请:是指由客户真个套接字提出衔接申请,要衔接的指标是效劳器真个套接字。为此,客户真个套接字必需起首面善它要衔接的效劳器的套接字,指出效劳器套接字的地点以及端标语 , 而后就像效劳器端套接字提出衔接申请。

三、衔接确认:是指当效劳器端套接字监听到或许说接纳到客户端套接字的衔接申请,他就呼应客户端套接字的申请,建设一个新的线程,把效劳器端套接字的形容发给客户端 , 一旦客户确认了此形容 , 衔接就建设好了。而效劳器端套接字持续处于监听状态,持续接纳其余客户端接字的链接申请。

1、测试环境:

  效劳器ip:xxx.xxx.xxx.1

  客户端ip: xxx.xxx.xxx.2

二 、测试进程:

  客户端效劳器将正在本机(xxx.xxx.xxx.1)经过socket发送数据到效劳端(xxx.xxx.xxx.2)的socket效劳器上,效劳端收到客户端发送的数据后前往一些给客户端.

3、效劳端文件内容:  

<?php
  //猎取tcp协定号吗.
  $tcp = getprotobyname("tcp");
  //建设server端socket , 创立并前往一个套接字,也称做一个通信节点.一个典型的网络衔接由2个套接字形成 , 一个运转正在客户端 , 另外一个运转正在效劳器端.
  $socket = socket_create(AF_INFT , SOCK_STREAM , $tcp);
  //绑定要监听的ip以及端口 , 这里绑定的ip肯定要写局域网ip , 写成127.0.0.1客户端将无奈与效劳器端倡议衔接.
  socket_bind($socket , 'xxx.xxx.xxx.1' , 10008);
  //监听端口
  socket_listen($socket);
  //初始化一个数据 , 以及客户端通讯
  $buffer = "connect";
  while(true){
    //承受客户端申请过去的yigesocket衔接
    $connection = socket-accept($scoket);
    if(!connection){
      echo "connect faild";
    } else {
    echo "Socket connected \n";
    //向客户通报一个信息数据
   if($buffer != ""){
    echo "send data to client\n";
    socket_write($connection , $buffer , "\n");
    echo "Wrote to socket\n";    
} else {
    echo "no data in the buffer\n";
}   
  //从客户端猎取患上的数据
  while($data = $socket_read($connection , 1024 , PHP_NORMAL_READ)){
  printf("Buffer:".$data.'\n');
  //获得信息给客户端一个反馈 ,Thank you client , you data is Received success发给客户真个回应信息.
  socket-wirte($coennection , "Thank you client , you data is Received success \n");
}
}
//封闭sockket
socket_close($connection);
printf("Closed the socket\n");
  
  }
?>

4、客户端文件内容:

<?php
  //建设客户真个socket衔接
  $socket = se);
  //衔接效劳器端socket
  $connection = socket_connect($socket , 'xxx.xxx.xxx.1' , 10008);
  //要求发送到效劳真个信息.
  $send_data = "This data will Send to server!";
  //客户端去衔接效劳端并承受效劳端前往的数据 , 假如前往的数据维护not connect就提醒不克不及衔接.
  while($buffer = @socket_read($socket , 1024,PHP_NORMAL_READ)){
    if(preg_match("/not connect/" , $buffer)){
    echo "don't connect\n";
    break;
  } else {
  //效劳端传来的信息
  echo "Buffer Data: ".$buffer .'\n';
  echo "Writing to Socket\n";
  //将客户的信息写道通道中 , 传给效劳器端
  if(!socket_write($socket , "$send_data\n")){
     echo "Write failed\n";
  }
  //效劳器端收到信息后 , 客户端承受效劳端传给客户真个回应信息.
  while($buffer = socket_read($socket , 1024 , PHP_NORMAL_READ)){
    echo "send to server: $send-data\n response from server was:".$buffer."\n";
  }
  }
  }
?>

5、正在效劳端socket效劳启动过程。

#/usr/local/php/bin/php -a/home/server.php
Interactive mode enable 互动模式启动

6、效劳端启动后查看启动的过程及端口

#netstat -tnlp |grep 10008
tcp   0  0 192.168.13:10008  0.0.0.0:*  LISTEN
28892/php

7、正在客户端(192.168.1.2)上执行传输

#/usr/local/php/bin/php -a client.php
Interactive mode enabled

8、回到效劳器端上查看承受到的信息。

#/usr/local/php/bin/php -a /home/server.php
Interactive mode enabled
 
Socket connected
send data client
Wrote to socket
Buffer:This data will Send to server!

相干教程:PHP视频教程

以上就是PHP 若何进行socket套节字的衔接的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学 socket

抱歉,评论功能暂时关闭!