소켓(Socket)의 원래 의미는 영어로 "구멍" 또는 "소켓"입니다. BSD UNIX의 프로세스 통신 메커니즘으로는 후자의 의미를 갖는다. 일반적으로 "소켓"이라고도 하며 IP 주소와 포트를 설명하는 데 사용되며 통신 체인에 대한 핸들이며 서로 다른 가상 머신 또는 서로 다른 컴퓨터 간의 통신을 구현하는 데 사용할 수 있습니다. 인터넷상의 호스트는 일반적으로 여러 서비스 소프트웨어를 실행하고 동시에 여러 서비스를 제공합니다. 각 서비스는 소켓을 열고 포트에 바인딩됩니다. 다른 포트는 다른 서비스에 해당합니다. 소켓은 다중 구멍 소켓과 같이 영어의 원래 의미와 같습니다. 호스트는 다양한 소켓이 있는 방과 같습니다. 각 소켓에는 번호가 있습니다. 일부 소켓은 220V AC 전원을 제공하고 일부는 110V AC 전원을 제공하며 일부는 케이블 TV 프로그램을 제공합니다. 클라이언트 소프트웨어는 플러그를 다른 번호의 소켓에 연결하여 다른 서비스를 받습니다. 이 글은 주로 PHP에서의 소켓 사용법을 소개하고, PHP에서의 소켓 통신의 전체 단계를 자세히 설명합니다. 필요한 친구는 이를 참고할 수 있습니다.
1. 소켓을 엽니다
phpinfo(); 소켓 확장이 활성화되어 있는지 확인하고, 그렇지 않으면 php.ini에서 활성화합니다.
2. 서버측 코드 작성 방법
코드는 다음과 같습니다.<?php error_reporting(E_ALL); set_time_limit(0); //ob_implicit_flush(); $address = '127.0.0.1'; $port = 10005; //创建端口 if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { echo "socket_create() failed :reason:" . socket_strerror(socket_last_error()) . "\n"; } //绑定 if (socket_bind($sock, $address, $port) === false) { echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n"; } //监听 if (socket_listen($sock, 5) === false) { echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n"; } do { //得到一个链接 if (($msgsock = socket_accept($sock)) === false) { echo "socket_accepty() failed :reason:".socket_strerror(socket_last_error($sock)) . "\n"; break; } //welcome 发送到客户端 $msg = "<font color='red'>server send:welcome</font><br/>"; socket_write($msgsock, $msg, strlen($msg)); echo 'read client message\n'; $buf = socket_read($msgsock, 8192); $talkback = "received message:$buf\n"; echo $talkback; if (false === socket_write($msgsock, $talkback, strlen($talkback))) { echo "socket_write() failed reason:" . socket_strerror(socket_last_error($sock)) ."\n"; } else { echo 'send success'; } socket_close($msgsock); } while(true); //关闭socket socket_close($sock); ?>서버측은 cli 모드에서 실행해야 합니다. php.ini 파일이 다르게 로드될 수 있습니다. cli mode다음과 같이 출력할 수 있습니다.
이때, zhoxh 디렉터리에 tem.text 파일이 있습니다. 구성 파일(php.ini) 경로를 확인하세요. => C:WINDOWS . 내 php.ini 파일이 아닙니다. 이는 호출되는 php.ini 파일이 잘못되었음을 의미합니다. 이때 php.ini 파일 명령을 다음과 같이 지정해야 합니다 환경 변수를 설정한 상태에서 내 php를 바로 실행할 수 있다는 점 참고하세요.
3.클라이언트
코드는 다음과 같습니다.
<?php //error_reporting(E_ALL); echo "<h2>tcp/ip connection </h2>\n"; $service_port = 10005; $address = '127.0.0.1'; $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "OK. \n"; } echo "Attempting to connect to '$address' on port '$service_port'..."; $result = socket_connect($socket, $address, $service_port); if($result === false) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else { echo "OK \n"; } $in = "HEAD / http/1.1\r\n"; $in .= "HOST: localhost \r\n"; $in .= "Connection: close\r\n\r\n"; $out = ""; echo "sending http head request ..."; socket_write($socket, $in, strlen($in)); echo "OK\n"; echo "Reading response:\n\n"; while ($out = socket_read($socket, 8192)) { echo $out; } echo "closeing socket.."; socket_close($socket); echo "ok .\n\n";실행 결과는 다음과 같습니다.
server:
위 내용은 PHP의 소켓 사용 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!