首頁  >  文章  >  後端開發  >  PHP 如何進行socket套組字的連接

PHP 如何進行socket套組字的連接

little bottle
little bottle原創
2019-04-22 11:14:282522瀏覽

socket通常也稱為"套接字",用來描述IP位址和連接埠 , 是一個通訊鏈的句柄。應用程式通常透過「套接字」先伺服器發出請求或應答網路請求。本文主要講述的是PHP中套組字之間的連結過程,具有一定的參考價值,有興趣的朋友可以學習了解一下。

根據連結啟動的方式以及本地套接字要連接的目標, 套組字之間的連接過程可以分為三個步驟:

1、伺服器監聽:是伺服器端套接字並沒有定位具體的客戶端套接字, 而是處於等待連線的狀態,即時監控網路狀態。

2、客戶端請求:是指由客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須先面熟它要連接的伺服器的套接字,指出伺服器套接字的位址和連接埠號碼 , 然後就像伺服器端套接字提出連接請求。

3、連線確認:是指當伺服器端套接字監聽到或說接收到客戶端套接字的連線請求,他就回應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發給客戶端, 一旦客戶確認了此描述, 連接就建立好了。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端接字的連結請求。

一、測試環境:

  伺服器ip:xxx.xxx.xxx.1


# #  客戶端ip: xxx.xxx.xxx.2

二、測試過程:

###  客戶端伺服器將在本機(xxx .xxx.xxx.1)透過socket傳送資料到服務端(xxx.xxx.xxx.2)的socket伺服器上,服務端收到客戶端傳送的資料後傳回一些給客戶端.###### ######三、服務端檔案內容:######  ######
<?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 , &#39;xxx.xxx.xxx.1&#39; , 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.&#39;\n&#39;);
  //取得信息给客户端一个反馈 ,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");
  
  }
?>
######四、客戶端檔案內容:######
<?php
  //建立客户端的socket连接
  $socket = se);
  //连接服务器端socket
  $connection = socket_connect($socket , &#39;xxx.xxx.xxx.1&#39; , 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&#39;t connect\n";
    break;
  } else {
  //服务端传来的信息
  echo "Buffer Data: ".$buffer .&#39;\n&#39;;
  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";
  }
  }
  }
?>
##### ##五、在服務端socket服務啟動進程。 ##################
#/usr/local/php/bin/php -a/home/server.php
Interactive mode enable 互动模式启动
######六、服務端啟動後檢視啟動的程序及連接埠########
#netstat -tnlp |grep 10008
tcp   0  0 192.168.13:10008  0.0.0.0:*  LISTEN
28892/php
### ###七、在客戶端(192.168.1.2)上執行傳輸##################
#/usr/local/php/bin/php -a client.php
Interactive mode enabled
######八、回到伺服器端查看接受到的信息。 ##################
#/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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn