Heim  >  Artikel  >  Backend-Entwicklung  >  So verbinden Sie einen Socket-Socket in PHP

So verbinden Sie einen Socket-Socket in PHP

little bottle
little bottleOriginal
2019-04-22 11:14:282550Durchsuche

Socket wird oft als „Socket“ bezeichnet, was zur Beschreibung der IP-Adresse und des Ports verwendet wird und das Handle einer Kommunikationskette darstellt. Anwendungen stellen normalerweise Anfragen an den Server oder antworten auf Netzwerkanfragen über „Sockets“. In diesem Artikel geht es hauptsächlich um den Verbindungsprozess zwischen Socket-Zeichen in PHP, der einen gewissen Referenzwert hat.

Je nachdem, wie die Verbindung gestartet wird und mit welchem ​​Ziel der lokale Socket verbunden werden soll, kann der Verbindungsprozess zwischen Sockets in drei Schritte unterteilt werden:

1. Serverüberwachung: Der serverseitige Socket findet den spezifischen Client-Socket nicht, sondern wartet auf eine Verbindung und überwacht den Netzwerkstatus in Echtzeit.

2. Client-Anfrage: Bezieht sich auf eine Verbindungsanforderung, die vom Socket des Clients gestellt wird, und das zu verbindende Ziel ist der Socket des Servers. Dazu muss sich der Client-Socket zunächst mit dem Socket des Servers vertraut machen, mit dem er eine Verbindung herstellen möchte, die Adresse und Portnummer des Server-Sockets angeben und dann genau wie der Server-Socket eine Verbindungsanforderung stellen.

3. Verbindungsbestätigung: Wenn der serverseitige Socket die Verbindungsanforderung des Client-Sockets abhört oder empfängt, antwortet er auf die Anfrage des Client-Sockets, erstellt einen neuen Thread und Senden Sie die Beschreibung des serverseitigen Sockets an den Client. Sobald der Client diese Beschreibung bestätigt, wird die Verbindung hergestellt. Der serverseitige Socket befindet sich weiterhin im Überwachungsstatus und empfängt weiterhin Verbindungsanfragen von anderen Client-Sockets.

1. Testumgebung:

Server-IP: xxx.xxx.xxx.1

Client-IP: xxx.xxx.xxx.2

2. Testvorgang:

Der Client-Server befindet sich auf diesem Computer (xxx .xxx.xxx.1) Senden Sie Daten über Socket an den Socket-Server des Servers (xxx.xxx.xxx.2). Nach dem Empfang der vom Client gesendeten Daten gibt der Server einige Daten an den Client zurück 🎜>

3. Serverdateiinhalt:

 

<?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");
  
  }
?>

4. Client-Dateiinhalt:

<?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";
  }
  }
  }
?>

5. Starten Sie den Vorgang auf dem Server-Socket-Dienst.

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

6. Überprüfen Sie den gestarteten Prozess und den Port, nachdem der Server gestartet wurde

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

7. Führen Sie die Übertragung auf dem Client durch (192.168.1.2)

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

8 Die Abnahmeinformation ist eingetroffen.

#/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!
Verwandte Tutorials:

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo verbinden Sie einen Socket-Socket in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn