>  기사  >  백엔드 개발  >  PHP에서 소켓 소켓을 연결하는 방법

PHP에서 소켓 소켓을 연결하는 방법

little bottle
little bottle원래의
2019-04-22 11:14:282519검색

일반적으로 "소켓"이라고도 불리는 소켓은 IP 주소와 포트를 설명하는 데 사용되며 통신 체인에 대한 핸들입니다. 응용 프로그램은 일반적으로 "소켓"을 통해 서버에 요청하거나 네트워크 요청에 응답합니다. 이 기사에서는 주로 PHP의 소켓 문자 간의 연결 프로세스에 대해 설명합니다. 관심 있는 친구는 이에 대해 배울 수 있습니다.

링크가 시작되는 방식과 로컬 소켓이 연결되는 대상에 따라 소켓 간의 연결 프로세스는 세 단계로 나눌 수 있습니다.

1 서버 모니터링: 서버 측 소켓입니다. 특정 클라이언트 소켓을 찾아내지는 않지만 연결을 기다리는 상태로 네트워크 상태를 실시간으로 모니터링합니다.

2. 클라이언트 요청: 클라이언트의 소켓에서 이루어진 연결 요청을 말하며, 연결 대상은 서버의 소켓입니다. 이를 위해 클라이언트의 소켓은 먼저 연결하려는 서버의 소켓을 숙지하고 서버 소켓의 주소와 포트 번호를 지정한 다음 서버의 소켓과 마찬가지로 연결 요청을 해야 합니다.

3. 연결 확인: 서버 측 소켓이 클라이언트 소켓의 연결 요청을 수신하거나 수신할 때 클라이언트 소켓의 요청에 응답하고 새 스레드를 설정하며 서버 측 소켓 설명을 의미합니다. 클라이언트가 이 설명을 확인하면 연결이 설정됩니다. 서버측 소켓은 계속 수신 대기 상태에 있으며 다른 클라이언트 소켓으로부터 링크 요청을 계속 수신합니다.

1. 테스트 환경 :

서버 ip : xxx.xxx.xxx.1

클라이언트 ip : xxx.xxx.xxx.2

2. 테스트 프로세스 :

클라이언트 서버는 로컬 컴퓨터의 소켓(xxx.xxx.xxx.1)을 통해 서버의 소켓 서버(xxx.xxx.xxx.2)로 데이터를 보냅니다. 서버는 보낸 데이터를 받은 후 일부 데이터를 반환합니다.

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 , &#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. 클라이언트 파일 콘텐츠:

<?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. 서버 소켓 서비스에서 프로세스를 시작합니다.

#/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
관련 튜토리얼:

PHP 비디오 튜토리얼

위 내용은 PHP에서 소켓 소켓을 연결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.