>백엔드 개발 >PHP 튜토리얼 >PHP 기술 고도화 PHP SOCKET 기술 연구

PHP 기술 고도화 PHP SOCKET 기술 연구

黄舟
黄舟원래의
2016-12-16 13:26:381485검색

오늘은 소켓을 통해 PHP와 C 언어 간에 통신하는 프로그램을 작성해 보았습니다. PHP 매뉴얼을 읽은 후 소켓 클라이언트를 설정하는 방법이 여러 가지 있다는 것을 알았습니다. fsockopen()을 통해 연결한 다음 fputs()를 사용하여 메시지를 보내고 fgets()를 사용하여 메시지를 받습니다.

2.socket_create()를 통해 소켓 연결을 설정한 다음, 소켓_send() 또는 소켓_write()를 사용하여 메시지를 보내고, 소켓_recv() 또는 소켓_read()를 사용하여 메시지를 보냅니다.

매우 이상합니다. 매뉴얼에서 다음 단락을 봤습니다. "이 확장 모듈은 실험적입니다. 이 모듈의 기능 이름과 이 모듈에 대한 기타 문서를 포함하여 이 모듈의 동작은 예고 없이 변경될 수 있습니다. 상황 PHP의 후속 릴리스에서는 변경될 예정입니다. 이 확장 모듈을 사용하는 데 따른 책임은 사용자에게 있습니다. "php4.0 소켓 통신은 아직 완전히 안정적이지 않은 것 같습니다.

오늘 제가 작성한 클라이언트는 서버와 두 번 통신해야 합니다. 위의 방법을 사용하여 클라이언트 프로그램을 작성했는데, 통신이 하나만 있을 때 PHP 클라이언트가 메시지를 한 번 보냈습니다. 그런 다음 반환 메시지를 받고 연결을 닫습니다. 두 방법 모두 기능을 정확하고 빠르게 구현할 수 있지만 두 번 통신할 때 분명한 차이가 있습니다. 첫 번째 방법의 경우 서버 출력을 보면 매우 빨리 끝나는 것을 알 수 있지만 두 번째 통신에는 몇 분이 소요됩니다. 여러 번 시도했지만 여전히 문제가 발생했습니다. 내 프로그램에 무엇이 잘못되었는지, 아니면 이 방법으로 연결에 문제가 있는지 잘 모르겠습니다. 그러나 두 번째 방법은 이 두 가지 통신을 빠르고 정확하게 완료하지 못했습니다. ! 아주 잘 했어요.

드디어 두 번째 상황을 바탕으로 클래스를 작성했습니다

위 내용은 PHP 기술 고급 PHP SOCKET 기술 연구 내용이며, 더 많은 관련 글은 PHP를 참고해주세요. 중국사이트(www.php.cn)!
////////////////////////////// File Description //////////////////////////////////////////
//  Class Name            : socket
//  Version               : V1.0
//  Functional Outline    : create socket,and send message to server
//  Revision history      : 2004/12/15 First version created
//  Current               : 2004/12/15 Liu Yongsheng
//////////////////////////////////////////////////////////////////////////////////////////
class socket{
 var $socket; //socket 句柄
 var $sendflag = ">>>";
 var $recvflag = "<<<";
 var $response;
 var $debug = 1;
 function socket($hostname,$port){
  $address = gethostbyname($hostname);
  $this->socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
     $result =  socket_connect($this->socket,$address,$port);
  if($this->debug == 1){
   if ($result < 0) {
      echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "<br>";
   } else{
      echo "connect OK.<br>";
   }
  }   
 }
 function sendmsg($msg){
  socket_write($this->socket,$msg,strlen($msg));
  $result  = socket_read($this->socket,100);
  $this->response = $result;
  if($this->debug == 1){
      printf("<font color=#CCCCCC>%s $msg</fon><br>",$this->sendflag);
      printf("<font color=blue>%s $result</font><br>",$this->recvflag);
  } 
        return $result;
 }
 function close(){
  socket_close($this->socket);
 }
}


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