PHP 소켓 프로그래밍에 대한 간단한 이해

不言
풀어 주다: 2023-03-24 17:54:02
원래의
1063명이 탐색했습니다.

이 글은 주로 PHP 소켓 프로그래밍에 대한 간단한 이해를 소개합니다. 이제는 도움이 필요한 친구들이

socket프로그래밍을 참조할 수 있습니다. 하지만 socket의 여러 기능과 이들이 수행하는 역할 간의 관계를 이해하는 한, 저자의 의견으로는 socket 프로그래밍을 이해하는 것이 어렵지 않습니다. 네트워크 서비스의 클라이언트와 서버를 구축하는 것입니다. mysql의 클라이언트와 서버가 무엇인지 이해하면 됩니다. 당신은 내가 아래에서 말하려는 내용을 이해할 수 있을 것입니다. socket프로그래밍과 관련된 네트워크 프로토콜에 대해서는 TCP

ah, UDPah, socket 3방향 핸드셰이크 등에 대해 많이 있습니다. 네트워크 인터넷상의 프로토콜 여기서는 자세한 설명을 하지 않겠지만, 여러분이 볼 수 있도록 소켓을 설정하는 과정을 스크린샷으로 찍겠습니다: Steal 거기 스크린샷을 잘 보셔야 합니다. 시간이 지나면 저에게서 스크린샷을 훔친 작성자에게도 감사의 말씀을 전하고 싶습니다. 귀하의 패턴을 도용한 것에 대해 사과드립니다. 저는 그림을 그리는 게 너무 게으른 편이에요(사실 그림 실력에 자신이 없다는 뜻이죠, 하하).

     소켓은 어떻게 연결을 설정하나요? 위에서 언급했듯이 연결을 설정하는 과정은 기본적으로 mysql의 클라이언트와 서버 간의 연결과 동일합니다. mysql과의 차이점은 mysql의 서버와 클라이언트가 편집되었기 때문에 적용하기만 하면 된다는 것입니다. 그러나 중요한 순간이 왔습니다. socket은 우리에게 아무것도 제공하지 않으며, 우리에게 제공하는 유일한 것은 수십 개의 socket 기능뿐입니다. pranded >> mysql

과 유사한 서버 및 클라이언트 응용 프로그램을 구축합니다. 그러고보니 묻고 싶은게 이 소켓이 사람들을 골치 아프게 한다고 생각하시나요? 우리가 신청할 수 있는 서버도 클라이언트도 생성하지 않습니다. 우리가 직접 socket 기능을 사용하여 자체 네트워크 프로토콜 소켓 애플리케이션을 만들어야 합니다. 당황스럽지 않나요? 골치 아픈 문제에 대한 해결책은 없습니다. 자신만의 애플리케이션이 필요한 경우에도 socket을 처리해야 합니다. 하하, 이건 그냥 여담이에요. 많이 말하지 않겠습니다. 요점만 말씀드리겠습니다.

    socket프로그래밍으로 인해 혼란스러워지기 전에 socket의 몇 가지 주요 기능을 살펴보고 해당 기능에 대해 먼저 설명하겠습니다. 그렇지 않고 socket프로그래밍에 대한 기본 지식이 없는 사람이 이 글을 읽는다면, 이 글을 과감히 건너뛰고 socket 공포증에 빠질까 두렵습니다. 하하, 더 말해 보세요. ㅋㅋㅋㅋㅋㅋㅋㅋㅋ                     키 기능을 통한 로그 1

$streamparameters2 ,

$protocol

parameters3)   기능: socket 소켓word을 만듭니다. 직설적으로 말하면 네트워크 데이터 흐름입니다.    반환 값: 소켓 또는 false, 매개변수 오류 발생 E_WARNING

Warning

   php의 온라인 매뉴얼을 보면 더 명확해집니다.

  socket_create통신 노드라고도 하는 소켓을 생성하고 반환합니다. 일반적인 네트워크 연결은 2 소켓으로 구성됩니다. 하나는 클라이언트 측에서 실행되고 다른 하나는 서버 측에서 실행됩니다.

위 문장은 php 온라인 매뉴얼에서 복사한 것입니다. 여기서의 의미가 위에서 반복적으로 언급한 클라이언트 및 서버와 완전히 동일하다는 것을 알 수 있습니까? 헤헤.

   매개변수 1는 네트워크 프로토콜,

   네트워크 프로토콜이란 무엇입니까? 옵션은 다음 세 가지입니다:

  AF_INET:  IPv4 네트워크 프로토콜. TCP UDP 모두 이 프로토콜을 사용할 수 있습니다. 이것은 일반적으로 사용됩니다.

   AF_INET6: IPv6 네트워크 프로토콜. TCP UDP 모두 이 프로토콜을 사용할 수 있습니다.

  AF_UNIX:  로컬 통신 프로토콜. IPC(프로세스 간 통신)은 고성능과 저렴한 비용을 제공합니다.

2 : 소켓 스트림, 옵션은 다음과 같습니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋ     TCP 프로토콜 소켓을 통해 로그인하세요.   SOCK_DGRAM  UDP 프로토콜 소켓.  자세한 내용은 여기 링크를 참조하세요:

http://php.net/manual/zh/function.socket-create.php

    매개변수 3: protocol 프로토콜, 옵션은 다음과 같습니다.

   SOL_TCP: TCP 프로토콜.

  SOL_UDP: UDP프로토콜.

     ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​여기에서 볼 수 있듯이 실제로 socket_create 함수의 두 번째 매개변수와 세 번째 매개변수는 서로 연관되어 있습니다.

 예를 들어 첫 번째 매개변수가 IPv4 프로토콜: AF_INET을 사용하고 두 번째 매개변수가 TCP소켓을 사용하는 경우: SOCK_STREAM ,

   그런 다음 세 번째 매개변수를 사용해야 합니다. SOL_TCP, 이것은 이해하기 어렵지 않습니다.

  TCP 프로토콜 소켓은 당연히 TCP 프로토콜만 사용할 수 있겠죠? UDP 소켓을 사용한다면 세 번째 매개변수를 선택하는 방법은 언급하지 않겠습니다. 하하.

주요 기능 2

socket_connect($socketparameter1, $ipparameter2 , $portparameter 3)

   기능: 소켓을 연결합니다. 반환 값은

true 또는 false

   매개변수

1: socket_create 함수 return

값 우리 U 안의 우리 안에 있는 안에 있는

 핵심 기능 3

  socket_bind($socketparameter1,$ipparameter2,$portparameter 3)

함수: 소켓을 바인딩합니다. 반환 값은 true 또는 false

​​ Parameter 1: socket_create

의 함수 반환 값입니다.   매개변수2 : ipAddress

  매개변수 3: 포트 번호

  주요 기능 4 :

  socket_listen($socketparameters1, $ 백로그 매개변수2)

함수: 소켓을 수신합니다. 반환 값은 true 또는 false

  매개변수 1: socket_create

의 함수 반환 값    매개변수2:최대 청취 소켓 수

 Key5:

  socket_accept($ 소켓)

  기능: 소켓 수신 리소스 정보 소켓이 성공적으로 반환되었으며 실패는 false

  매개변수: 함수 반환 값 socket_create

 핵심 함수 6

  socket_read( $socket 매개변수 1, $length 매개변수 2)

   기능: 소켓의 리소스 정보를 읽습니다.

   반환 값: 소켓 리소스를 문자열 정보로 성공적으로 변환, 실패는 false

   매개 변수 1: socket_create 또는 socket_accept 함수 반환 값

  매개변수 2 : 문자열 읽기

 주요 기능 7:

msgparameter2 , $str lenParameters3) 함수 : 소켓에 데이터 쓰기

반환 값: 성공하면 문자열의 바이트 길이를 반환하고, 실패하면 false

를 반환합니다.

   매개변수 1: socket_create

또는

socket_accept의 함수 반환 값

  매개변수 2: 문자열

   매개변수 3: 문자열의 길이

 주요 기능 8:

소켓_close($socket)

함수: 소켓 닫기

socket_create 또는 socket_accept 함수 반환 값

  이 8가지 기능이 소켓의 핵심 기능입니다. . 여기에 두 가지 더 중요한 함수가 있습니다

  socket_last_error($socket)

, 매개변수는 소켓_create의 반환 값은 소켓의 마지막 오류 코드 번호를 얻는 데 사용됩니다. 코드

  socket_strerror($code), 매개변수는 socket_last_error 함수의 반환 값이며, code의 문자열 정보를 가져오고, 반환 값은 소켓 오류 정보

  이것 socket프로그래밍에서 함수는 여전히 매우 중요합니다. socket프로그래밍을 작성할 때 특히 초보자의 경우 이를 활용해야 한다고 생각합니다. 특히 디버깅에 사용할 수 있습니다.

  다음은 코드입니다. 주의하세요. 제 댓글을 잘 읽어보세요. 댓글은 매우 중요합니다. 댓글은 매우 중요합니다. 댓글은 매우 중요합니다. 중요한 것은 세 번 외쳐야 합니다. 하하.

   서버 스크립트, D:vhosttestsocketserver_socket.php

  팁: 위의 소켓_바인드, 소켓_리스너, 소켓_accept에 주의하세요. 세 가지 기능의 실행 순서는 변경할 수 없습니다. 즉, 소켓_바인드는 다음과 같아야 합니다. 먼저 실행된 다음, 소켓_수신, 마지막으로 소켓_accept

    客户端脚本,D:\vhost\test\socket\client_socket.php

 


PHP 소켓 프로그래밍에 대한 간단한 이해

<?php     //创建一个socket套接流
    $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);    /****************设置socket连接选项,这两个步骤你可以省略*************/
     //接收套接流的最大超时时间1秒,后面是微秒单位超时时间,设置为零,表示不管它
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));     //发送套接流的最大超时时间为6秒
    socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 6, "usec" => 0));    /****************设置socket连接选项,这两个步骤你可以省略*************/

    //连接服务端的套接流,这一步就是使客户端与服务器端的套接流建立联系
    if(socket_connect($socket,'127.0.0.1',8888) == false){        echo 'connect fail massege:'.socket_strerror(socket_last_error());
    }else{        $message = 'l love you 我爱你 socket';        //转为GBK编码,处理乱码问题,这要看你的编码情况而定,每个人的编码都不同
        $message = mb_convert_encoding($message,'GBK','UTF-8');        //向服务端写入字符串信息

        if(socket_write($socket,$message,strlen($message)) == false){            echo 'fail to write'.socket_strerror(socket_last_error());

        }else{            echo 'client write success'.PHP_EOL;            //读取服务端返回来的套接流信息
            while($callback = socket_read($socket,1024)){                echo 'server return message is:'.PHP_EOL.$callback;
            }
        }
    }
    socket_close($socket);//工作完毕,关闭套接流
로그인 후 복사

PHP 소켓 프로그래밍에 대한 간단한 이해

 

     怎么测试这两个脚本呢?

    首先打开windows的dos窗口,就是cmd黑窗口,然后,运行php D:\vhost\test\socket\server_socket.php,

    让服务端的的黑窗口持续运行的,

    其次,php的客户端脚本可以通过浏览器运行,也可以再开一个cmd黑窗口运行

    php D:\vhost\test\socket\client_socket.php

      在这里请注意:php这个运行命名必须加入windows的环境变量中,假如不知道怎么加,

    请进入php运行命令目录用绝对命令运行,也可以百度把php命令加入环境变量中

    这里是我的情况,你的文件地址可能和我不一样,请按照你的地址情况来操作,否则,后果自负,呵呵

    上面已经说过了,socket编程必须要有服务端才能交流,所以服务端的黑窗口是必须让它持续开着的。

 

  추신 추가됨:

socket_set_option($socketparameter1 , $level parameter2 , $optname 매개변수3 , $optval parameters4)

이 함수는 소켓에 대한 데이터 흐름 옵션을 설정하는 데 사용되는 함수이기도 하며 매우 중요한 함수입니다.

Parameter 1: socket_create 또는 socket_accept

Parameter2의 함수 반환 값 : SOL_SOCKET, 이런 것 같아요 유일한 옵션

매개변수 3은 매개변수 4,

과 관련이 있습니다.

매개변수 3는 다음과 같습니다: SO_REUSEADDR SO_RCVTIMEO​​ 릴리스 직후 다시 사용할 수 있습니다
매개변수

3

가 이것이면 매개변수 4

는 다음과 같습니다. 사실

또는 falseSO_RCVTIMEO  는 소켓 수신 리소스의 최대 시간 초과입니다. SO_SNDTIMEO 는 소켓의 송신 리소스 시간 초과입니다.

  매개변수 3가 다음과 같은 경우 이 두 개를 사용하면

4 매개변수는 다음과 같은 배열입니다. array('sec'=> 1,'usec'=>500000)

시간 제한을 설정하는 최대 시간 배열에 설정되어 있지만 하나는 초 단위이고 다른 하나는 마이크로초 단위입니다. 효과는 동일합니다

관련 추천:

php 소켓 통신 콘텐츠

위 내용은 PHP 소켓 프로그래밍에 대한 간단한 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!