-
PHP socket functionsTechnique/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