소스 파일명 : php_socket.php
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
<?php // (2018.6.13, 차재복, Cha Jae Bok, cjbword@gmailcom) 

// 도메인명에 대한 ip 주소 리턴
$ip_addr = gethostbyname("www.ktword.co.kr");


# [클라이언트 소켓 생성]
$fp = stream_socket_client("tcp://$ip_addr:80", $errno, $errstr );
	// 목적지 형식 : transport_protocol://target_ip_addr:port_number


# [클라이언트 소켓 생성의 실패/성공에 따른 조건절]
if ( !$fp ) {	// 소켓 생성 실패하면, 에러 메세지 및 에러 번호를 출력

    echo "$errstr  ($errno)<br />\n";

} else {		// 소켓 생성 성공하면, 현 호스트 자신이 클라이언트 및 웹서버 동시 역할 수행

	# [http 요청 메세지 구성]
	// http 요청 메세지
	$http_get_string = 
		"GET / HTTP/1.0"."\r\n".			// GET 메소드 및 http 버젼
		"Host: www.ktword.co.kr"."\r\n".	// 호스트 주소 (도메인 명 및 호스트 명)
		"Accept: */*"."\r\n".				// 이 클라이언트는 어떤 미디어 타입도 가능함을 웹서버에게 알료줌
		"\r\n";								// 빈 줄 : HTTP 헤더와 본문(body) 시작을 구분시켜 준다는 의미 (이 경우, body는 없음)

	// 위의 http 요청 메세지를 기 설정된 소켓에 쓰기
	fwrite($fp, $http_get_string);

	# [http 요청 및 응답]  
	echo "<pre>".stream_get_contents($fp)."</pre>";
		// 직전에 소켓에 쓰여진 http 요청 메세지를,
		// 웹서버(http://www.ktword.co.kr)에 보내고,
		// 이에 응답한 http 응답 메세지(http 헤더 + http body)를,
		// 그대로 텍스트로 웹브라우저 화면에 보여줌

	# [소켓 종료]  통상적인 파일 I/O 처럼, 소켓을 닫음
	fclose($fp);

}

?>