>  기사  >  백엔드 개발  >  PHP에서 소켓을 구현하는 방법에 대한 자세한 설명

PHP에서 소켓을 구현하는 방법에 대한 자세한 설명

PHPz
PHPz원래의
2023-03-28 09:23:404208검색

PHP는 웹 개발에 널리 사용되는 서버 측 스크립팅 언어인 반면, 소켓은 서버 응용 프로그램이나 클라이언트 응용 프로그램에서 데이터를 보내거나 받는 데 사용할 수 있는 범용 인터페이스입니다. PHP는 소켓을 사용하여 네트워크의 TCP/IP 프로토콜을 기반으로 소켓 통신을 수행하여 웹 서버에서 데이터 상호 작용을 실현할 수 있습니다.

PHP는 매우 편리한 소켓 확장을 제공합니다. 이 확장을 통해 소켓 프로그래밍을 쉽게 구현할 수 있습니다. 아래에서는 PHP에서 소켓을 구현하는 방법을 소개하겠습니다.

소켓 확장 설치

PHP 5.0.0 버전 이후 소켓 확장은 기본적으로 PHP에 포함되어 있으므로 대부분의 PHP에는 이미 이 확장이 포함되어 있습니다. 그러나 PHP 버전이 너무 오래되었거나 이 확장 기능이 포함되어 있지 않으면 직접 설치해야 합니다. 다음 명령을 통해 Linux에 설치할 수 있습니다.

sudo apt-get install php7.0-sockets

Windows 시스템을 사용하는 경우 PHP 공식 웹사이트에 가서 해당 확장 파일을 다운로드한 후 php.ini 파일에 확장 파일을 추가하세요.

소켓 연결 생성

먼저 PHP에서 소켓 연결을 생성하려면, 이 함수를 호출할 때 세 가지 매개변수를 전달해야 합니다:

  1. domain: 프로토콜 도메인 , 일반적으로 사용되는 것은 AF_INET, AF_INET6 및 AF_UNIX이며, 가장 일반적으로 사용되는 것은 IPv4 프로토콜을 나타내는 AF_INET입니다. IPv6 프로토콜을 사용하려면 AF_INET6을 사용해야 합니다. 유형, 일반적으로 사용되는 것은 다음과 같습니다. SOCK_STREAM, SOCK_DGRAM, SOCK_RAW 중 가장 일반적으로 사용되는 것은 스트림 기반 TCP 연결을 나타내는 SOCK_STREAM입니다.
  2. 다음은 소켓_create 함수를 사용하여 연결을 설정하는 예입니다.
  3. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  4. 연결을 성공적으로 생성한 후 소켓을 로컬 포트에 바인딩해야 합니다.
socket_bind($socket, 0, 8080);

여기서 소켓은 로컬 IP에 바인딩됩니다. 포트 8080의 주소와 포트 번호. 특정 IP 주소에 바인딩하려면 두 번째 매개변수를 해당 IP 주소로 설정할 수 있습니다.

연결 수신

소켓이 로컬 포트에 바인딩되면 클라이언트 연결 요청 수신을 시작할 수 있습니다. 이는 소켓_listen 함수를 사용하여 수행해야 합니다.
socket_listen($socket);
연결 요청 수신 대기를 시작하기 전에 소켓의 일부 매개변수를 구성하려면 소켓_set_option 함수를 사용할 수 있습니다. 예:

socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

이 예에서는 SO_REUSEADDR 옵션을 1로 설정합니다. 이는 로컬 주소를 재사용할 수 있음을 의미하므로 "주소가 이미 사용 중입니다" 오류를 방지할 수 있습니다.

연결 요청 수신

클라이언트가 소켓에 연결되면 소켓_accept 함수를 사용하여 연결 요청을 받아야 합니다.
$clientSocket = socket_accept($socket);
클라이언트가 연결되면 이 함수는 새 소켓 핸들을 반환합니다. 고객과의 의사소통에 사용됩니다.

데이터 보내기 및 받기

소켓 연결이 설정된 후 클라이언트와 서버는 서로 설정된 소켓 연결을 통해 데이터를 보내고 받을 수 있습니다.

데이터 보내기

    서버는 소켓_쓰기 함수를 사용하여 클라이언트에 데이터를 보냅니다.
  • $msg = "Hello, Client!";
    socket_write($clientSocket, $msg, strlen($msg));
  • 이 예에서는 클라이언트에 메시지를 보냅니다.

데이터 수신

    클라이언트는 서버에 데이터를 보내고, 서버는 소켓_read 함수를 통해 데이터를 수신할 수 있습니다.
  • $msg = socket_read($clientSocket, 1024);
  • 이 예에서는 클라이언트로부터 매번 1024바이트의 데이터를 수신하여 서버에 저장합니다. $msg 변수입니다.

socket_read 함수는 클라이언트가 연결을 닫았음을 나타내는 빈 문자열을 반환할 수 있다는 점에 유의해야 합니다.

연결 종료

데이터 전송이 완료되면 연결을 종료해야 합니다. 이는 소켓_close 함수를 사용하여 구현해야 합니다:
socket_close($socket);
socket_close($clientSocket);
그중 첫 번째 소켓 핸들은 서버 소켓을 나타내고 두 번째 소켓 핸들은 클라이언트와 설정된 소켓 연결을 나타냅니다.

요약

PHP에서는 소켓 확장을 사용하여 소켓 프로그래밍을 수행할 수 있습니다. 우리는 소켓 연결을 생성하기 위해 소켓_create 함수를 사용할 수 있고, 로컬 포트에 소켓을 바인드하기 위해 소켓_바인드 함수, 요청 수신을 시작하기 위해 소켓_리스닝 함수, 연결 요청을 수신하기 위해 소켓_accept 함수, 데이터를 수신하기 위해 소켓_read 함수, 소켓_쓰기를 사용할 수 있습니다. 데이터를 전송하는 함수, 마지막으로 연결을 닫는 소켓_close 함수입니다. PHP 소켓 프로그래밍을 배우고 싶다면 이 기사에 제공된 예제를 기반으로 연습할 수 있습니다.

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

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