오늘은 소켓을 통해 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); } }