이 기사에서는 주로 텍스트와 코드 형식으로 PHP에서 소켓을 구현하는 방법을 공유합니다.
1. 소켓 소개
1. 소켓은 단지 데이터 구조일 뿐입니다.
2. 이 소켓 데이터 구조를 사용하여 클라이언트와 서버 간의 세션을 시작하세요.
3. 서버는 항상 새로운 세션 생성을 듣고 준비하고 있습니다. 클라이언트가 서버에 연결되면 서버가 세션을 수신하는 포트를 엽니다.
4. 서버는 클라이언트의 연결 요청을 수락한 다음 루프를 수행합니다. 이제 클라이언트는 서버에 정보를 보낼 수 있고, 서버는 클라이언트에 정보를 보낼 수 있습니다.
2. 소켓 변수
소켓을 생성하려면 프로토콜, 소켓 유형, 공용 프로토콜 유형의 세 가지 변수가 필요합니다.
1. 프로토콜
소스 코드 보기, 클립보드에 복사 및 도움말 인쇄
AF_INET
//소켓을 생성하고 전송을 위해 TCP 또는 UDP를 사용하며 IPv4 주소에서 사용되는 프로토콜
//이 프로토콜 순차적이고 안정적인 데이터 통합 바이트 스트림 기반 연결입니다. 가장 일반적으로 사용되는 소켓 유형입니다. 이 소켓은 전송에 TCP를 사용합니다.
1.socket_create
함수: 소켓 데이터 구조 생성과 동일합니다.Return: 성공 시 소켓 리소스, 오류 시 FALSE
Usage: 소켓_bind(리소스 소켓, 문자열 주소 [, int 포트 ] )
매개변수: 소켓, 소켓 리소스, IP 주소, 포트3.socket_accept
함수: 소켓 연결 수락
사용법: 소켓_accept(리소스 소켓)
매개변수: 소켓, 소켓 리소스
반환: 성공 시 새 소켓 리소스를 반환하거나 오류 시 FALSE를 반환합니다.
4. 기능: 소켓 연결 시작
사용법: 소켓_연결(리소스 소켓, 문자열 주소 [, int 포트])
매개변수: 소켓, 소켓 리소스; 주소, IP 주소, 포트
반환: Boolean
기능: 지정된 소켓의 모든 연결을 수신합니다
사용법: 소켓_listen(리소스 소켓 [, int backlog])
매개변수: 소켓, 소켓 리소스;
반환: Boolean
기능: 지정된 길이의 데이터 읽기
사용법: 소켓_read(리소스 소켓, int 길이 [, int 유형])
매개변수: 소켓, 소켓 리소스; 길이, 문자 길이; 유형, PHP_BINARY_READ |PHP_NORMAL_READ
Return: 문자열
기능: 소켓 캐시에 데이터 쓰기
사용 : 소켓_쓰기(리소스 소켓, 문자열 버퍼[, 정수 길이])
파라미터: 소켓, 소켓 리소스;버퍼, 문자 길이, 문자 길이;
Return: Boolean
사용법: 소켓_전송(리소스 소켓, 문자열 buf, int len, int 플래그)
매개변수: 소켓, 소켓 리소스;buf, 문자; len, 문자 길이;
반환: Boolean
9, 소켓_last_error
사용법:socket_last_error([리소스 소켓])
매개 변수:socket,socketresource;
Return:int
10,socket_strerror
사용법:socket_strerror (int errno )
매개변수: errno, 소켓_last_error no;
Return: 문자열
11, 소켓_close
Usage: 소켓_close([리소스 소켓])
매개변수: 소켓, 소켓 리소스;
Return: null
4, 사용 지침
a. PHP.ini 파일을 편집하고 Extension=php_sockets.dll의 이전 주석을 제거하세요.
b 확장 라이브러리를 로드하는 코드
소스 보기 코드를 작성하고 클립보드에 복사하여 도움말을 인쇄하세요
1. 서버 측
기능:
a, 초기화 소켓이 열리고 버퍼가 열려 데이터를 보내고 받습니다.
b. 연결이 생성되면 서버 측 화면에 "소켓 연결됨"이 인쇄됩니다.
c. 서버는 버퍼에 데이터가 있는지 확인하여 연결된 컴퓨터로 데이터를 보냅니다.
그런 다음 이 데이터에 대한 수락 메시지를 보냅니다. 메시지를 수락하면 메시지를 데이터에 저장하고 연결된 컴퓨터에 메시지를 알리고 마지막으로 연결을 닫습니다.
d. 연결이 종료된 후 서버는 다음 연결 처리를 시작합니다.
소스 코드를 보고 클립보드에 복사하여 도움말을 인쇄하세요
// 获取协议 $commonProtocol = getprotobyname("tcp"); //产生一个socket $socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol); //把socket绑定在一个IP地址和端口上 socket_bind($socket, 'localhost', 1337); //监听由指定socket的所有连接 socket_listen($socket); //初始化buffer $buffer = "NO DATA"; while(true) { //接受一个Socket连接 $connection = socket_accept($socket); printf("Socket connected\r\n"); // 检测 buffer if($buffer != ""){ printf("Something is in the buffer...sending data...\r\n"); //写数据到socket缓存 socket_write($connection, $buffer . "\r\n"); printf("Wrote to socket\r\n"); }else { printf("No Data in the buffer\r\n"); } //读取指定长度的数据 while($data = socket_read($connection, 1024, PHP_NORMAL_READ)) { $buffer = $data; //写数据到socket缓存 socket_write($connection, "Information Received\r\n"); printf("Buffer: " . $buffer . "\r\n"); } //关闭一个socket资源 socket_close($connection); printf("Closed the socket\r\n\r\n"); }
기능:
a. 클라이언트가 데이터를 읽습니다.
b. 이것이 이 루프에 처음으로 도달하는 첫 번째 연결인 경우 서버는 클라이언트에 "NO DATA"를 다시 보냅니다. 이런 일이 발생하면 클라이언트가 연결의 최상위에 있습니다.
c. 클라이언트는 데이터를 서버로 보내고, 데이터는 서버로 전송되며, 클라이언트는 응답을 기다립니다. 응답을 받으면 화면에 응답을 씁니다.
소스 코드 보기, 클립보드에 복사 및 도움말 인쇄
// 创建 socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //链接 socket $connection = socket_connect($socket,'localhost', 1337); //读取指定长度的数据 while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) { if($buffer == "NO DATA") { printf("NO DATA"); break; }else{ // 输出 buffer printf("Buffer Data: " . $buffer . ""); } } printf("Writing to Socket"); //写数据到socket缓存 if(!socket_write($socket, "SOME DATA\r\n")){ printf("Write failed"); } //读取指定长度的数据 while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)){ printf("Data sent was: SOME DATA Response was:" . $buffer . ""); } printf("Done Reading from Socket");
위 내용은 PHP에서 소켓을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!