ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PHP socket functions
    Technique/PHP 2015. 12. 7. 10:09
    반응형

    업무에서 php 소켓 프로그래밍을 할 경우가 생겨서 좀 조사 해봤는데

    php.net 이 모두 영어로 나와 있는 바람에 좀 고생하면서 번역해 봄..


    - 사용한 함수

    socket_create

    socket_set_option

    socket_connet

    socket_write

    socket_read



    입니다. 도움되는 함수가 있엇으면 좋겠네요 ㅎㅎ

    ( 번역도..... ㅎㅎ )




    socket_create( domain, type, protocol )


    통신의 엔드포인트와 호출도 어느 소켓의 리소스를 작성하여 반환합니다

    특정한 네트워크 접속은 2개의 소켓으로부터 구성됩니다

    이때, 한쪽은 클라이언트, 한쪽은 서버의 역활을 합니다

     

    파라메터

     

    domain - 소켓이 사용하는 프로토콜패밀리를 지정합니다.

    AF_INET - ipv4 인터넷프로토콜, 이 프로토콜 패밀리에 속하는 프로토콜로서 잘 알려져 있는 것은 TCP나 UDP 입니다

     

    type - 소켓이 사용하는 통신방법을 지정합니다

    SOCK_STREAM - 이 타입에서는 시계열적( 시간적 변화를 관찰 ), 고신뢰성, 전이중(동시 송,수신) 접속형의 바이트스트림이 이용됩니다.

                          대역외의 데이터 통신메카니즘이 서포트되는 경우 도 있습니다. TCP프로토콜은 이 소켓타입에 속합니다

                 

    protocol -  소켓상의 통신에 사용되는 domain에 지정된 패밀리에 속하는 프로토콜을 지정합니다.

                  올바른 값은 getprotobyname()을 사용한 것으로 취득가능합니다. 사용하고싶은 프로토콜이 TCP 또는 UDP의 경우엔

                  정소 SQL_TCP, SQL_UDP를 지 정하는 것도 가능합니다.

     

    변환값

     

    socket_create는 성송시에 소켓리소스, 실패시에 false를 반환합니다.

    실제의 에러코드는 socket_last_eroror()를 콜 하는 것으로 취득 가능합니다.

    이 에러코드를 한번더 socket_strerror()에 건내는 것으로 에러의 내용을 문자열로 취득하는 것도 가능합니다.

     

    에러/예외

    domain 이나 type에 부정한 값이 주어지는 경우 socket_create()는 이것들을 각각 AF_INET,와 SOCK_STREAM 인 것으로 간주,

    E_WARNING메시지를 출력합니다.


    socket_set_option( resource $socket , int $level , int $optname , mixed $optval )


     

    socket_set_option 함수는 level이 지정한 프로토콜 레벨에 소켓( socket )의 옵션( optname )에 값 optval을 지정한다

     

    파라메터

     

    socket  - socket_create() 또는 socket_accept()로 작성한 소켓 리소스

    level   - 옵션의 프로토콜 레벨을 지정합니다. 예를들어, 옵션을 소켓 레벨으로 지정하는 것은 level 파라메터에 SOL_SOCKET을 지정합니다.

              TCP처럼 그외의 레벨의 경우, 그 레벨의 프로토콜 번호를 지정합니다. 프로토콜번호는 getprotobytname()함수를 사용하여 취득 가능합니다.

    optname - 사용가능한 소켓옵션은 socket_get_option 함수와 동일합니다.

    optval  - 옵션의 값

     

    반환값

     

    성공한경우엔 TRUE 를 실패한 경우엔 FALSE를 반환합니다.



    socket_connect ( resource $socket , string $address [, int $port = 0 ] )

     

    소켓리소스 socket을 사용하여 address에 접속을 초기화 합니다.

    이 리소스는 socket_create()에서 작성한 유효한 소켓 리소스여야 합니다.

     

    파라메터

    socket  - socket_create()로 작성된 소켓 리소스

    address - 파라메터 address에는 socket의 복수가 AF_INET의 경우에는 점(.)구분 표시의 IPv4 주소(예:192.168.0.1)

                IPv6 서포트가 유효하며 socket의 종류가 AF_INET6 의경우 IPv6 주소(예 ::1), AF_UNIX의 경우 도메인소켓의 경로명을 지정합니다.

    port    - AF_INET소켓 또는 AF_INET6 에 접속하는 경우만 필요로하여, 접속한 원격 호스트의 포트를 지정합니다.

     

    반환치

    성공한 경우엔 TRUE, 실패한 경우엔 FALSE 를 반환합니다.

    에러코드는 socket_last_error()에 의해 취득 가능 합니다. 이 에러코드를 socket_strerror() 에 전달하는 것으로,

    에러내용을 나타내는 문자열을 취득 하는 것도 가능 합니다.


    socket_write ( resource $socket , string $buffer [, int $length = 0 ] )


    buffer의 내용을 소켓 socket에 넣습니다.

     

    파라메터

    socket  - socket_create()로 작성된 소켓 리소스

    buffer  - 작성될 buffer

    length  - 옵션의 파라메터 length로, 소켓에 작성한 바이트수를 지정하는 것이 가능 합니다.

              이 값이 버퍼의 길이보다 큰 경우 자동적으로 버퍼의 사이즈만큼 잘려 읽힙니다.

     

    반환치

    소켓의 쓰기가 성공한 데이터의 바이트 를 반환 합니다. 실패한 경우 FALSE를 반환 합니다.

    에러코드는 socket_last_error()를 사용하여 취득가능하며, 이 값은 socket_strerror()에 전달하는 것으로 에러정보를 문자열로 취득 가능 합니다.

     

    ※주의

    socket_write()가 0를 반환하는 것도 충분히 가능한 이야기 입니다. 이것은 작성한 데이터가 존재하지 않는 경우를 의미합니다.

    에러를 체크하기 위해 false인가 아닌가를 알아보기 위해서는 필히 === 연산자를 사용합시다.



    socket_read ( resource $socket , int $length [, int $type = 

    PHP_BINARY_READ ] )

    함수 socket_create() 또는 socket_accept()에 의해 작성된 소켓 리소스 socket로부터 읽어들입니다.

     

    파라메터

    socket - socket_create(), socket_accept() 로 작성된 소켓 리소스

    length - 읽어들일 수 있는 최대 바이트길이는 length파라메터로 지정합니다. 읽어들이기를 종료하기 위해서는 \r, \n, \0 를 사용 할 수있습니다.

             ( 이것은 이하에 나타낸 type에 의존합니다 )

    type   - 옵션의 마라메터 type은 이름의 어느 정수 입니다.

    PHP_BINARY_READ( 기본 ) - 시스템의 recv()함수를 사용합니다. 바이너리 데이터 읽기에 안전합니다.

    PHP_NORMAL_READ - 읽기는 \n, \r 로  중단 됩니다.

     

    반환값

    socket_read는 성공시에 문자열로 된 데이터를 반환, 에러시( 원격 호스트가 접속을 끊은 경우도 포함 )에 FALSE를 반환합니다.

    에러코드는 socket_last_error()로 취득 가능하며, 이 에러는 에러문자열을 취득하기 위해 socket_strerror()에 건내는 것이 가능 합니다

     

    ※주의

    socket_read()는 읽기데이터가 더 이상 존재하지 않는 경우에 길이0의 문자열 "" 을 반환 합니다.




    반응형

    'Technique > PHP' 카테고리의 다른 글

    move_uploaded_file  (0) 2016.04.11
    file_get_contents  (0) 2016.04.08
    spl_autoload_register  (0) 2015.12.15
    에러 출력하기  (0) 2015.12.08
    객체지향 설계 5원칙  (0) 2015.12.08

    댓글

Designed by Tistory.