티스토리 뷰
클라이언트 소켓 함수
소켓 연결(클라이언트쪽)은 다음과 같은 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 |
댓글