Download presentation
Presentation is loading. Please wait.
Published byWidya Dewi Kurniawan Modified 6년 전
1
PHP 웹 프로그래밍 (PHP Web Programming) 네트워크 프로그래밍 문양세 강원대학교 IT대학 컴퓨터과학전공
2
소켓 (Socket) (1/2) Socket 이란?
네트워크 프로그래밍 Socket 이란? 서버와 클라이언트가 서로 특정한 규약을 사용하여 데이터를 전송하기 위한 방식 서버와 클라이언트는 소켓 연결을 기다렸다가 소켓이 연결되면 서로 데이터를 전송 현재 네트워크 상에서의 모든 통신의 근간은 Socket이라 할 수 있음
3
자세한 내용은 네트워크 프로그래밍 시간에 학습하세요.
소켓 (Socket) (2/2) 네트워크 프로그래밍 socket() 함수 (socket_create()) domain: AF_INET (Internet), AF_UNIX (UNIX) 통상 AP_INET만 사용함 type: SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET, SOCK_RAW, SOCK_RDM 통상 UDP로서 SOCK_DGRAM을, TCP로서 SOCK_STREAM만을 사용함 protocol: SOL_ICMP, SOL_UDP, SOL_TCP 통상 0를 입력하면 됨 리턴 값이 -1이면 실패 (그렇지 않으면 성공) int socket_create (int domain, int type, int protocol) 자세한 내용은 네트워크 프로그래밍 시간에 학습하세요.
4
UDP (User Data Protocol) (1/3)
네트워크 프로그래밍 UDP란? 비연결형(connectionless) 통신 프로토콜로서, 비교적 간단한 네트워크 프로그래밍을 할 때 사용함 패킷에 데이터를 실어서 보내는데 데이터를 보내기 전에 서버와 연결을 하기 위한 작업이 생략됨 데이터 전송에 대한 신뢰성을 보장하지 않기 때문에 전송 중에 패킷을 잃어버릴 수 있음 UDP socket_create()에서 type 파라미터는 SOCK_DGRAM을 사용
5
UDP (User Data Protocol) (1/3)
네트워크 프로그래밍 UDP란? 비연결형(connectionless) 통신 프로토콜로서, 비교적 간단한 네트워크 프로그래밍을 할 때 사용함 패킷에 데이터를 실어서 보내는데 데이터를 보내기 전에 서버와 연결을 하기 위한 작업이 생략됨 데이터 전송에 대한 신뢰성을 보장하지 않기 때문에 전송 중에 패킷을 잃어버릴 수 있음 UDP socket_create()에서 type 파라미터는 SOCK_DGRAM을 사용
6
UDP (User Data Protocol) (2/3)
네트워크 프로그래밍 UDP 수행(접속) 절차 클라이언트 서버 create() create() bind() sendto() recvfrom() recvfrom() sendto()
7
상기함수들은 PHP 버전 등에 따라 달라질 수 있음에 유의하세요.
UDP (User Data Protocol) (3/3) 네트워크 프로그래밍 Bind (socket_bind()) int socket_bind (resource socket, string address [, int port]) Receive From (socket_recvfrom()) int socket_recvfrom (resource socket, string buffer, int length, int flag, string address, int port); Send To (socket_sendto()) int socket_sendto (resource socket, string buffer, int length, int flag, string address, int port); Close (socket_close()) bool socket_close (resource socket) 상기함수들은 PHP 버전 등에 따라 달라질 수 있음에 유의하세요.
8
클라이언트 사이드: udp_client.php
네트워크 프로그래밍 UDP 프로그램 예제 클라이언트는 단어들을 서버에 전송하고, 서버에서 이를 정렬하여 다시 클라이언트에 전송하는 프로그램 서버 사이드: udp_server.php UDP로 클라이언트에서 보낸 데이터를 수신(socket_recvfrom)하고, 이를 단어순으로 정렬(preg_split, sort)한 후, 다시 서버로 송신(socket_sendto)한다. 클라이언트 사이드: udp_client.php UDP로 서버에 단어들을 송신(socket_sendto)하고, 서버에서 정렬된 순서의 단어들을 수신(socket_recvfrom)한다.
9
UDP 프로그램 예제 (2/5) udp_server.php <?
네트워크 프로그래밍 udp_server.php <? $addr = gethostbyname(' '); $port = 5090; $buf = ""; $sock = socket_create(AF_INET, SOCK_DGRAM, 0); if ($sock < 0) die (strerror ($sock)); socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1); if (($ret = socket_bind ($sock, $addr, $port)) < 0) die (strerror ($ret)); do { $read = socket_recvfrom($sock, $buf, 2048, 0, $addr, $port); echo "Receive data: $buf<br>"; $temp = preg_split ("/\s+/", $buf); // 문자열 분해 (space 하나 이상) sort ($temp); for ($i = count ($temp) - 1; $i >= 0; $i--) $resp .= $temp[$i] . " "; $send = socket_sendto ($sock, $resp, strlen ($resp), 0, $addr, $port); echo "Send data: $resp<br>"; } while ($read < 0); socket_close ($sock); ?>
10
UDP 프로그램 예제 (3/5) udp_client.php <?PHP
네트워크 프로그래밍 udp_client.php <?PHP $addr = gethostbyname (' '); $port = 5090; $data = "Apple Orange Banana Pear"; $buf1 = ""; $sock = socket_create (AF_INET, SOCK_DGRAM, 0); if ($sock < 0) die (strerror ($sock)); $ret = socket_sendto ($sock, $data, strlen ($data), 0, $addr, $port); echo "Send data: $data<br>"; do { $read = socket_recvfrom ($sock, $buf1, 2048, 0, $addr, $port); } while ($read < 0); echo "Receive data: $buf1<br>"; socket_close ($sock); ?>
11
UDP 프로그램 예제 (4/5) 네트워크 프로그래밍 실행 결과
12
UDP 프로그램 예제 (5/5) 네트워크 프로그래밍 주의: php_sockets.dll 활성화할 것
13
TCP (Transmission Control Protocol) (1/5)
네트워크 프로그래밍 TCP란? 연결지향형(connection oriented) 통신 프로토콜이며, 안전한 (reliable) 데이터 전송을 보장해 주는 프로토콜 서버에서 클라이언트의 연결을 기다리는 서버 소켓이 있으며 클라이언트는 미리 정해진 포트를 통해서 서버와 연결 한번 연결된 후에는 소켓을 통해 데이터를 계속해서 송수신할 수 있음 전송되는 데이터는 신뢰성이 보장되어 순서에 상관없이 데이터를 전송받아도 이를 재조합하여 정확한 데이터를 보내고 받을 수 있음 UDP와 다른 점은 서버 쪽에서 연결을 기다린다는 것임
14
TCP (Transmission Control Protocol) (2/5)
네트워크 프로그래밍 TCP란? (계속) listen() 함수를 이용하여 클라이언트쪽에서 socket_connect() 함수가 올 때까지 서버는 기다리고, socket_connect() 함수가 도착하면 socket_accept()를 보낸 후 데이터 전송을 시작함 socket_close() 함수를 이용하여 연결을 종료함 TCP에서 socket_create() 설정시 type 파라미터는 SOCK_STREAM을 사용함
15
TCP (Transmission Control Protocol) (3/5)
네트워크 프로그래밍 TCP 수행(접속) 절차 클라이언트 서버 create() create() bind() connect() listen() accept() write() read() read() write()
16
상기함수들은 PHP 버전 등에 따라 달라질 수 있음에 유의하세요.
TCP (Transmission Control Protocol) (4/5) 네트워크 프로그래밍 Listen (socket_listen()): 클라이언트로부터 Connection을 기다리는 역할 int socket_listen (resource socket, int backlog) Connect (socket_connect()): 클라이언트가 서버와 연결하기 위해 사용 int socket_connect (resource socket, string address [, int port]) Accept (socket_accept()): 서버쪽에서 연결을 받아들일 때, 클라이언트로 accept 메시지를 전송 int socket_accept (resource socket) 상기함수들은 PHP 버전 등에 따라 달라질 수 있음에 유의하세요.
17
상기함수들은 PHP 버전 등에 따라 달라질 수 있음에 유의하세요.
TCP (Transmission Control Protocol) (5/5) 네트워크 프로그래밍 Read (socket_read()): 데이터를 받을 때 사용 int socket_read (resource socket_des, string buffer, int length [, int type]) Write (socket_write()): 데이터를 보낼 때 사용 int socket_write (resource socket_des, string &buffer, int length) 상기함수들은 PHP 버전 등에 따라 달라질 수 있음에 유의하세요.
18
TCP 프로그램 예제 (1/6) TCP 프로그램 예제 서버 사이드: tcp_server.php
네트워크 프로그래밍 TCP 프로그램 예제 (앞서의 UDP와 마찬가지로) 클라이언트는 단어들을 서버에 전송하고, 서버에서 이를 정렬하여 다시 클라이언트에 전송하는 프로그램 서버 사이드: tcp_server.php 소켓을 생성(socket_create)하고, 바인딩(socket_bind)한 후, 클라이언트의 접속을 기다리다(socket_listen), 접속 요청이 오면 수락(socket_accept)하고, TCP로 클라이언트에서 보낸 데이터를 수신(socket_read)하고, 이를 단어순으로 정렬(preg_split, sort)한 후, 다시 서버로 송신(socket_write)한다.
19
클라이언트 사이드: tcp_client.php
네트워크 프로그래밍 클라이언트 사이드: tcp_client.php 소켓을 생성(socket_create)하고, 서버에 접속(socket_connect)한 후, TCP로 서버에 단어들을 송신(socket_write)하고, 서버에서 정렬된 순서의 단어들을 수신(socket_read)한다.
20
TCP 프로그램 예제 (3/6) tcp_server.php 네트워크 프로그래밍 <?
$address = " "; $port = 5071; if (($sock = socket_create (AF_INET, SOCK_STREAM, 0)) == FALSE) echo "socket_create() failed: reason:" . socket_strerror(socket_last_error()) . "<br>"; if(socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1) == FALSE) echo "socket_set_option() failed: reason:" . socket_strerror(socket_last_error()) . "<br>"; if (socket_bind ($sock, $address, $port) == FALSE) echo "socket_bind() failed: reason:" . socket_strerror(socket_last_error()) . "<br>"; if (socket_listen ($sock, 0) == FALSE) echo "socket_listen() failed: reason:" . socket_strerror(socket_last_error()) . "<br>"; if (($msgsock = socket_accept ($sock)) == FALSE) echo "socket_accept() failed: reason:" . socket_strerror(socket_last_error()) . "<br>";
21
TCP 프로그램 예제 (4/6) tcp_server.php (계속) 네트워크 프로그래밍
if(($buf = socket_read ($msgsock, 2048)) == FALSE) echo "socket_read() failed: reason:" . socket_strerror(socket_last_error()) . "<br>"; echo "Receive data: $buf<br>"; $temp = preg_split ("/\s+/", $buf); sort ($temp); for ($i = count ($temp) - 1; $i >= 0; $i--) $talkback .= ($temp[$i] . " "); if(socket_write ($msgsock, $talkback, strlen ($talkback)) == FALSE) echo "socket_write() failed: reason:" . socket_strerror(socket_last_error()) . "<br>"; echo "Send data: $talkback<br>"; socket_close ($msgsock); socket_close ($sock); ?>
22
TCP 프로그램 예제 (5/6) tcp_client.php 네트워크 프로그래밍 <?
$address = " "; $service_port = 5071; $socket = socket_create (AF_INET, SOCK_STREAM, 0); if ($socket == FALSE) echo "socket_create() failed: reason:" . socket_strerror(socket_last_error()) . "<br>"; if(socket_connect ($socket, $address, $service_port) == FALSE) echo "connect() failed: reason:" . socket_strerror(socket_last_error()) . "<br>"; $in = "Apple Orange Banana Pear"; if(socket_write ($socket, $in, strlen ($in)) == FALSE) echo "Send data: $in<br>"; if(($out = socket_read ($socket, 2048)) == FALSE) echo "Receive data: $out<br>"; socket_close ($socket); ?>
23
TCP 프로그램 예제 (6/6) 네트워크 프로그래밍 실행 결과
24
Homework #12 (실습 #11) 네트워크 프로그래밍
Similar presentations