최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

   클라이언트 소켓 함수


소켓 연결(클라이언트쪽)은 다음과 같은 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
?>

결과






댓글