백엔드 개발 PHP 튜토리얼 PHP의 기본 소켓 함수 구문 및 사용 예에 ​​대한 자세한 설명

PHP의 기본 소켓 함수 구문 및 사용 예에 ​​대한 자세한 설명

May 22, 2017 pm 02:49 PM

실제 개발에서 소켓 기반 애플리케이션을 만들려면 소켓 동작 방법을 자세히 이해해야 합니다. 이러한 동작 방법을 능숙하게 이해하고 사용하려면 먼저 다양한 소켓 기능을 이해해야 합니다. PHP에서. 이전 장에서 PHP에서 소켓이란 무엇입니까에 대해 자세히 소개했습니다. 다음은 PHP의 소켓 기능에 대한 소개입니다. PHP에는 수십 가지의 소켓 함수가 있습니다. 다음은 소개할 주요 소켓 함수입니다.

구문 형식 매개 변수는 다음과 같습니다.

1. socket_create

socket_create ( int $domain , int $type , int $protocol )
로그인 후 복사

이 함수는 다음과 같이 사용됩니다. 소켓을 생성하면 세 개의 매개변수가 있고 반환 값은 핸들(리소스)입니다.

$domain은 소켓을 생성할 때 사용되는 통신 프로토콜 제품군을 지정합니다. 선택적 값은 다음과 같습니다.

AF_INET: IPv4 기반 인터넷 프로토콜

AF_INET6: IPv6용 인터넷 프로토콜 기반

AF_UNIX: UNIX 로컬 통신 프로토콜

$type은 소켓 통신의 상호 작용 유형을 지정합니다. 선택 값은 다음과 같습니다.

SOCK_STREAM: 직렬화되고 안정적인 전이중 연결 기반 바이트 스트림 전송 제공, TCP 지원

SOCK_DGRAM: 데이터그램 스타일, 비연결, 고정된 최대 길이, 자동 주소 지정 기능 제공 전송, UDP 지원

SOCK_SEQPACKET: 직렬화되고 안정적인 이중 채널 연결 기반 데이터그램 전송 제공

SOCK_RAW: 원본 네트워크 액세스 프로토콜 제공, 특수 프로토콜을 수동으로 구축 가능 소켓 유형, ICMP 요청(예: ping) 지원

SOCK_RDM: 안정적인 데이터그램 전송을 제공하지만 순서는 보장할 수 없습니다.

$protocol은 ICMP, UDP, TCP를 포함하여 소켓이 사용하는 특정 전송 프로토콜을 지정하며 상수 SOL_UDP는 UDP에 해당합니다. 상수 SOL_TCP는 상수 TCP에 해당합니다.

2. socket_bind

socket_bind ( resource $socket , string $address [, int $port = 0 ] )
로그인 후 복사

이 함수는 소켓_create에 의해 생성된 핸들에 IP 주소와 포트를 바인딩하는 데 사용됩니다. 이 함수에는 세 개의 매개변수가 있으며 부울 값을 반환합니다.

$socket은 필수 매개변수로, 소켓_create 함수에 의해 생성된 핸들을 나타냅니다.

$address는 바인딩할 IP 주소를 나타내는 필수 매개변수입니다.

$port는 바인딩할 포트 번호를 나타내고 소켓 연결을 수신하는 데 사용되는 포트를 지정하는 선택적 매개변수입니다.

3. socket_listen

socket_listen ( resource $socket [, int $backlog = 0 ] )
로그인 후 복사

이 함수는 다가오는 소켓 연결을 수신하는 데 사용됩니다. 소켓의 상호 작용 유형이 SOCK_STREAM 또는 SOCK_SEQPACKET인 경우에만 사용할 수 있습니다.

사용하면 두 개의 매개변수가 있고 부울 값을 반환합니다.

$socket은 소켓_create 함수에 의해 생성되고 호스트에 바인딩된 핸들을 나타내는 필수 매개변수입니다.

$backlog는 처리 대기 중인 항목을 나타내는 선택적 매개변수입니다. 대기열(백로그가 허용됨)의 최대 연결 수입니다.

4. socket_set_block

socket_set_block ( resource $socket )
로그인 후 복사

이 함수는 소켓 핸들을 차단 모드로 설정하는 데 사용되며 필수 매개변수는 하나만 있고 부울 값을 반환합니다. 비차단 모드 소켓을 차단 모드로 변환할 수 있습니다.

차단 모드 소켓에서 작업(수신, 보내기, 연결, 승인 등)을 수행할 때 스크립트는 신호를 받거나 작업을 완료할 때까지 실행을 일시 중지합니다.

$socket은 유효한 소켓 핸들(socket_create 또는 소켓_accept에 의해 생성됨)을 나타내는 필수 매개변수입니다.

차단 모드비차단 모드의 차이점을 설명하세요.

비차단이란 함수 작업이 다음 단계까지 실행되지 않음을 의미합니다. 결과를 즉시 얻을 수 없습니다. 현재 스레드를 차단하고 즉시 반환합니다. 차단이란 작업을 완료할 때까지 다시 돌아올 수 없다는 의미입니다. 다음 단계를 계속하려면 먼저 상대방으로부터 응답을 받아야 합니다. 특히, 사용자가 많을 경우에는 반드시 Non-Blocking으로 설정해 주셔야 합니다. 차단 모드인 경우 두 클라이언트가 동시에 연결된 경우 서버가 한 클라이언트의 요청을 처리하는 동안 다른 클라이언트의 요청은 차단됩니다. 이전 클라이언트의 업무가 처리된 후에야 후자 클라이언트의 요청이 처리됩니다. 응답될 것입니다.

5. socket_write

socket_write ( resource $socket , string $buffer [, int $length = 0 ] )
로그인 후 복사

이 함수는 지정된 크기의 버퍼 데이터를 소켓에 쓰는 데 사용되며 세 개의 매개 변수를 가지며 바이트 수를 반환합니다. 작성된 데이터.

$socket은 필수 매개변수이며 유효한 소켓 핸들을 나타냅니다.

$buffer는 작성할 문자열 데이터를 지정하는 필수 매개변수입니다.

$length는 소켓에 차례로 쓸 데이터의 바이트 수를 지정하는 선택적 매개 변수입니다. 해당 값이 $buffer의 바이트 수보다 크면 자동으로 가로채게 됩니다. $buffer의 길이(바이트)입니다.

6. socket_read

socket_read ( resource $socket , int $length [, int $type = PHP_BINARY_READ ] )
로그인 후 복사

이 함수는 소켓에서 지정된 바이트 길이의 데이터를 읽는 데 사용되며, 읽은 문자열 데이터를 반환합니다.

$socket은 필수 매개변수이며 유효한 소켓 핸들을 나타냅니다.
$length는 읽을 바이트 길이를 지정하는 필수 매개변수입니다.

$type은 선택적 매개변수이며, 기본값은 PHP_BINARY_READ입니다. 이는 바이너리 데이터를 안전하게 읽는다는 의미입니다. 다른 선택적 값은 PHP_NORMAL_READ입니다. 이는 r 또는 n이 발견되면 읽기를 중지한다는 의미입니다.

7. pfsockopen

pfsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
로그인 후 복사

该函数用于实现一个持久的socket连接,即长连接,返回一个句柄。它与 fsockopen 的区别在于,pfsockopen 建立的连接,在脚本执行完毕后,并不会断开。

8. socket_set_option

socket_set_option ( resource$socket , int$level , int$optname , mixed$optval )
로그인 후 복사

该函数用于设置socket的控制选项,有四个参数,返回布尔值。

$socket 是必选参数,代表一个有效的socket句柄。

$level 是必选参数,指定option起作用的协议级别,一般取常量 SOL_SOCKET。

$optname 是必选参数,指定要控制的选项名称。

$optval 是必选参数,指定选项的值。

9. socket_last_error

socket_last_error ([ resource$socket ] )
로그인 후 복사

该函数用于获取任何socket函数产生的最后错误代号,返回值为整型。

10. socket_strerror

socket_strerror ( int $errno )
로그인 후 복사

该函数用于获取错误代号代表的错误描述,返回值为字符串。

以上所有的函数都是PHP中关于socket的,使用这些函数,你必须把你的socket打开,如果你没有打开,请编辑你的php.ini文件,去掉下面这行前面的注释:

extension=php_sockets.dll
로그인 후 복사

如果你不知道你的socket是否打开,那么你可以使用phpinfo()函数来确定socket是否打开。

下面通过创建一个服务端和客户端的例子来说明这些函数的用法:

  1. 服务器端

<?php
//确保在连接客户端时不会超时
set_time_limit(0);
$ip = &#39;127.0.0.1&#39;;
$port = 1935;
/*
 +-------------------------------
 *    @socket通信整个过程
 +-------------------------------
 *    @socket_create
 *    @socket_bind
 *    @socket_listen
 *    @socket_accept
 *    @socket_read
 *    @socket_write
 *    @socket_close
 +--------------------------------
 */
/*----------------    以下操作都是手册上的    -------------------*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
    echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
    echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0) {
    echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
$count = 0;
do {
    if (($msgsock = socket_accept($sock)) < 0) {
        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
        break;
    } else {
        
        //发到客户端
        $msg ="测试成功!\n";
        socket_write($msgsock, $msg, strlen($msg));
        
        echo "测试成功了啊\n";
        $buf = socket_read($msgsock,8192);
        
        
        $talkback = "收到的信息:$buf\n";
        echo $talkback;
        
        if(++$count >= 5){
            break;
        };
        
    
    }
    //echo $buf;
    socket_close($msgsock);
} while (true);
socket_close($sock);
?>
로그인 후 복사

2. 客户端

<?php
error_reporting(E_ALL);
set_time_limit(0);
echo "<h2>TCP/IP Connection</h2>\n";
$port = 1935;
$ip = "127.0.0.1";
/*
 +-------------------------------
 *    @socket连接整个过程
 +-------------------------------
 *    @socket_create
 *    @socket_connect
 *    @socket_write
 *    @socket_read
 *    @socket_close
 +--------------------------------
 */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
    echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}else {
    echo "OK.\n";
}
echo "试图连接 &#39;$ip&#39; 端口 &#39;$port&#39;...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}else {
    echo "连接OK\n";
}
$in = "Ho\r\n";
$in .= "first blood\r\n";
$out = &#39;&#39;;
if(!socket_write($socket, $in, strlen($in))) {
    echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}else {
    echo "发送到服务器信息成功!\n";
    echo "发送的内容为:<font color=&#39;red&#39;>$in</font> <br>";
}
while($out = socket_read($socket, 8192)) {
    echo "接收服务器回传信息成功!\n";
    echo "接受的内容为:",$out;
}
echo "关闭SOCKET...\n";
socket_close($socket);
echo "关闭OK\n";
?>
로그인 후 복사

【相关教程推荐】

1. 《php.cn独孤九贱(4)-php视频教程

2.   php编程从入门到精通全套教程

위 내용은 PHP의 기본 소켓 함수 구문 및 사용 예에 ​​대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP : 웹 개발의 핵심 언어 PHP : 웹 개발의 핵심 언어 Apr 13, 2025 am 12:08 AM

PHP는 서버 측에서 널리 사용되는 스크립팅 언어이며 특히 웹 개발에 적합합니다. 1.PHP는 HTML을 포함하고 HTTP 요청 및 응답을 처리 할 수 ​​있으며 다양한 데이터베이스를 지원할 수 있습니다. 2.PHP는 강력한 커뮤니티 지원 및 오픈 소스 리소스를 통해 동적 웹 컨텐츠, 프로세스 양식 데이터, 액세스 데이터베이스 등을 생성하는 데 사용됩니다. 3. PHP는 해석 된 언어이며, 실행 프로세스에는 어휘 분석, 문법 분석, 편집 및 실행이 포함됩니다. 4. PHP는 사용자 등록 시스템과 같은 고급 응용 프로그램을 위해 MySQL과 결합 할 수 있습니다. 5. PHP를 디버깅 할 때 error_reporting () 및 var_dump ()와 같은 함수를 사용할 수 있습니다. 6. 캐싱 메커니즘을 사용하여 PHP 코드를 최적화하고 데이터베이스 쿼리를 최적화하며 내장 기능을 사용하십시오. 7

PHP vs. Python : 차이점 이해 PHP vs. Python : 차이점 이해 Apr 11, 2025 am 12:15 AM

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP 및 Python : 두 가지 인기있는 프로그래밍 언어를 비교합니다 PHP 및 Python : 두 가지 인기있는 프로그래밍 언어를 비교합니다 Apr 14, 2025 am 12:13 AM

PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

PHP 실행 : 실제 예제 및 응용 프로그램 PHP 실행 : 실제 예제 및 응용 프로그램 Apr 14, 2025 am 12:19 AM

PHP는 전자 상거래, 컨텐츠 관리 시스템 및 API 개발에 널리 사용됩니다. 1) 전자 상거래 : 쇼핑 카트 기능 및 지불 처리에 사용됩니다. 2) 컨텐츠 관리 시스템 : 동적 컨텐츠 생성 및 사용자 관리에 사용됩니다. 3) API 개발 : 편안한 API 개발 및 API 보안에 사용됩니다. 성능 최적화 및 모범 사례를 통해 PHP 애플리케이션의 효율성과 유지 보수 성이 향상됩니다.

PHP의 지속적인 관련성 : 여전히 살아 있습니까? PHP의 지속적인 관련성 : 여전히 살아 있습니까? Apr 14, 2025 am 12:12 AM

PHP는 여전히 역동적이며 현대 프로그래밍 분야에서 여전히 중요한 위치를 차지하고 있습니다. 1) PHP의 단순성과 강력한 커뮤니티 지원으로 인해 웹 개발에 널리 사용됩니다. 2) 유연성과 안정성은 웹 양식, 데이터베이스 작업 및 파일 처리를 처리하는 데 탁월합니다. 3) PHP는 지속적으로 발전하고 최적화하며 초보자 및 숙련 된 개발자에게 적합합니다.

PHP와 Python : 다른 패러다임이 설명되었습니다 PHP와 Python : 다른 패러다임이 설명되었습니다 Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP 대 기타 언어 : 비교 PHP 대 기타 언어 : 비교 Apr 13, 2025 am 12:19 AM

PHP는 특히 빠른 개발 및 동적 컨텐츠를 처리하는 데 웹 개발에 적합하지만 데이터 과학 및 엔터프라이즈 수준의 애플리케이션에는 적합하지 않습니다. Python과 비교할 때 PHP는 웹 개발에 더 많은 장점이 있지만 데이터 과학 분야에서는 Python만큼 좋지 않습니다. Java와 비교할 때 PHP는 엔터프라이즈 레벨 애플리케이션에서 더 나빠지지만 웹 개발에서는 더 유연합니다. JavaScript와 비교할 때 PHP는 백엔드 개발에서 더 간결하지만 프론트 엔드 개발에서는 JavaScript만큼 좋지 않습니다.

PHP 및 Python : 코드 예제 및 비교 PHP 및 Python : 코드 예제 및 비교 Apr 15, 2025 am 12:07 AM

PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

See all articles