티스토리 뷰
클라이언트 소켓 함수
소켓 연결(클라이언트쪽)은 다음과 같은 5단계로 나뉜다.
socket_create() //소켓을 생성한다. IPv4인지 IPv6인지, 타입, TCP인지 ICMP인지 UDP인지 등등을 정한다.
socket_connect() //ip와 port번호로 연결한다.
socket_write() //질의할 문자열과 버퍼등을 보낸다.
socket_read() //소켓에대한 버퍼 사이즈만큼 읽는다.
socket_close() //소켓 연결 종료
config.php
<? $config['ip']="111.222.333.444"; $config['port']=23991; ?>
socket.php
<? header("content-type:text/html;charset=utf-8"); error_reporting(E_PARSE | E_ERROR); require_once 'config.php'; function fnSocket($api, $buffer_size=2048) { global $config; //socket생성 $domain = AF_INET; //:IPv4, (AF_INET6, AF_UNIX) $type = SOCK_STREAM; $protocol = SOL_TCP; //icmp,udp,tcp $socket = socket_create($domain, $type , $protocol); if($socket){ echo "socket을 성공적으로 생성\r\n"; }else{ echo "socket_create()실패".socket_strerror(socket_last_error()); } //socket연결 $result = socket_connect($socket, $config['ip'], $config['port']); if( $result ){ echo "ip : {$config['ip']} port : {$config['port']} 연결성공\r\n\n"; }else{ echo "socket_connect()실패 Reason: $reault".socket_strerror(socket_last_error($socket)); } //socket전송 $api = $api."\r\n"; socket_write( $socket, $api, strlen($api) ); //socket읽기 - head $head = socket_read($socket, $buffer_size) or die("Could not read from Socket\n"); $head = iconv("EUC-KR","UTF-8", $head); echo $head."\r\n"; $split = explode("|", $head); $buffer = (int)$split[2]; //60003 //body $RecvBytes = 0; $TempRecv = 0; while($RecvBytes < $buffer) { $body = socket_read($socket, $buffer_size) or die("Could not read from Socket\n"); // 소켓으로 부터 받은 REQUEST 정보를 $input에 지정 // $body = iconv("EUC-KR","UTF-8", $body); echo $body."\r\n"; $TempRecv = strlen($body); $RecvBytes += $TempRecv; echo "[RecvBytes: $RecvBytes]\r\n"; if($TempRecv == 0 || $body == FALSE) break; } socket_close($socket); } // end func ?>
결과
'■ 백엔드 ■ > PHP' 카테고리의 다른 글
PHP 세션 값 오류의 원인 (0) | 2015.06.18 |
---|---|
rand( [int $min, int $max] ) (0) | 2015.03.03 |
list - 순차적인 값 바인딩 (0) | 2015.01.22 |
비밀번호 암호화의 종류와 적용 (0) | 2015.01.22 |
SQL 인젝션 공격에 대한 필수 인코딩 - mysql_real_escape_string() (1) | 2015.01.22 |
댓글