24
웹 웹웹웹웹웹 웹 웹웹 (Web Programming & Practice) 웹웹웹웹 웹웹웹웹웹 웹웹웹 웹웹웹웹웹 IT 웹웹 웹웹웹웹웹웹웹

웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교 IT 대학 컴퓨터과학전공

  • Upload
    keene

  • View
    63

  • Download
    7

Embed Size (px)

DESCRIPTION

웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교 IT 대학 컴퓨터과학전공. 소켓 (Socket) (1/2). 네트워크 프로그래밍. Socket 이란 ? 서버와 클라이언트가 서로 특정한 규약을 사용하여 데이터를 전송하기 위한 방식 서버와 클라이언트는 소켓 연결을 기다렸다가 소켓이 연결되면 서로 데이터를 전송 현재 네트워크 상에서의 모든 통신의 근간은 Socket 이라 할 수 있음. 소켓 (Socket) (2/2). 네트워크 프로그래밍. - PowerPoint PPT Presentation

Citation preview

Page 1: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

웹 프로그래밍 및 실습(Web Programming & Practice)

네트워크 프로그래밍

문양세강원대학교 IT 대학 컴퓨터과학전공

Page 2: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 2

Socket 이란 ?• 서버와 클라이언트가 서로 특정한 규약을 사용하여 데이터를 전송하기

위한 방식

• 서버와 클라이언트는 소켓 연결을 기다렸다가 소켓이 연결되면 서로 데이터를 전송

• 현재 네트워크 상에서의 모든 통신의 근간은 Socket 이라 할 수 있음

소켓 (Socket) (1/2)네트워크 프로그래밍

Page 3: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 3

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 이면 실패 ( 그렇지 않으면 성공 )

소켓 (Socket) (2/2)네트워크 프로그래밍

int socket_create (int domain, int type, int protocol)

Page 4: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 4

UDP 란 ?• 비연결형 (connectionless) 통신 프로토콜로서 , 비교적 간단한 네트워크

프로그래밍을 할 때 사용함

• 패킷에 데이터를 실어서 보내는데 데이터를 보내기 전에 서버와 연결을 하기 위한 작업이 생략됨

• 데이터 전송에 대한 신뢰성을 보장하지 않기 때문에 전송 중에 패킷을 잃어버릴 수 있음

• UDP socket_create() 에서 type 파라미터는 SOCK_DGRAM 을 사용

네트워크 프로그래밍UDP (User Data Protocol) (1/3)

Page 5: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 5

UDP 란 ?• 비연결형 (connectionless) 통신 프로토콜로서 , 비교적 간단한 네트워크

프로그래밍을 할 때 사용함

• 패킷에 데이터를 실어서 보내는데 데이터를 보내기 전에 서버와 연결을 하기 위한 작업이 생략됨

• 데이터 전송에 대한 신뢰성을 보장하지 않기 때문에 전송 중에 패킷을 잃어버릴 수 있음

• UDP socket_create() 에서 type 파라미터는 SOCK_DGRAM 을 사용

네트워크 프로그래밍UDP (User Data Protocol) (1/3)

Page 6: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 6

UDP 수행 ( 접속 ) 절차

UDP (User Data Protocol) (2/3)네트워크 프로그래밍

클라이언트 서버

create() create()

bind()

recvfrom()

sendto()

sendto()

recvfrom()

Page 7: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 7

Bind (socket_bind())

네트워크 프로그래밍UDP (User Data Protocol) (3/3)

Receive From (socket_recvfrom())

Send To (socket_sendto())

Close (socket_close())

int socket_bind (resource socket, string address [, int port])

int socket_recvfrom (resource socket, string buffer, int length, int flag, string address, int port);

int socket_sendto (resource socket, string buffer, int length, int flag, string address, int port);

bool socket_close (resource socket)

Page 8: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 8

UDP 프로그램 예제• 클라이언트는 단어들을 서버에 전송하고 ,• 서버에서 이를 정렬하여 다시 클라이언트에 전송하는 프로그램

서버 사이드 : udp_server.php• UDP 로 클라이언트에서 보낸 데이터를 수신 (socket_recvfrom) 하고 ,• 이를 단어순으로 정렬 (preg_split, sort) 한 후 ,• 다시 서버로 송신 (socket_sendto) 한다 .

클라이언트 사이드 : udp_client.php• UDP 로 서버에 단어들을 송신 (socket_sendto) 하고 ,• 서버에서 정렬된 순서의 단어들을 수신 (socket_recvfrom) 한다 .

네트워크 프로그래밍UDP 프로그램 예제 (1/5)

Page 9: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 9

udp_server.php

네트워크 프로그래밍UDP 프로그램 예제 (2/5)

<? $addr = gethostbyname('127.0.0.1'); $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);?>

Page 10: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 10

udp_client.php

네트워크 프로그래밍UDP 프로그램 예제 (3/5)

<?PHP $addr = gethostbyname ('127.0.0.1'); $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);?>

Page 11: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 11

실행 결과

네트워크 프로그래밍UDP 프로그램 예제 (4/5)

Page 12: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 12

주의 : php_sockets.dll 활성화할 것

네트워크 프로그래밍UDP 프로그램 예제 (5/5)

Page 13: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 13

TCP 란 ?• 연결지향형 (connection oriented) 통신 프로토콜이며 , 안전한 (reliable)

데이터 전송을 보장해 주는 프로토콜

• 서버에서 클라이언트의 연결을 기다리는 서버 소켓이 있으며 클라이언트는 미리 정해진 포트를 통해서 서버와 연결

• 한번 연결된 후에는 소켓을 통해 데이터를 계속해서 송수신할 수 있음

• 전송되는 데이터는 신뢰성이 보장되어 순서에 상관없이 데이터를 전송받아도 이를 재조합하여 정확한 데이터를 보내고 받을 수 있음

• UDP 와 다른 점은 서버 쪽에서 연결을 기다린다는 것임

네트워크 프로그래밍TCP (Transmission Control Protocol) (1/5)

Page 14: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 14

TCP 란 ? ( 계속 )• listen() 함수를 이용하여 클라이언트쪽에서 socket_connect() 함수가 올

때까지 서버는 기다리고 , socket_connect() 함수가 도착하면 socket_accept() 를 보낸 후 데이터 전송을 시작함

• socket_close() 함수를 이용하여 연결을 종료함

• TCP 에서 socket_create() 설정시 type 파라미터는 SOCK_STREAM 을 사용함

네트워크 프로그래밍TCP (Transmission Control Protocol) (2/5)

Page 15: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 15

네트워크 프로그래밍TCP (Transmission Control Protocol) (3/5)

TCP 수행 ( 접속 ) 절차

클라이언트 서버

create()

bind()

listen()

accept()

read()

write()

create()

connect()

write()

read()

Page 16: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 16

네트워크 프로그래밍TCP (Transmission Control Protocol) (4/5)

Listen (socket_listen()): 클라이언트로부터 Connection 을 기다리는 역할

Connect (socket_connect()): 클라이언트가 서버와 연결하기 위해 사용

Accept (socket_accept()):서버쪽에서 연결을 받아들일 때 , 클라이언트로 accept 메시지를 전송

int socket_listen (resource socket, int backlog)

int socket_connect (resource socket, string address [, int port])

int socket_accept (resource socket)

Page 17: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 17

네트워크 프로그래밍TCP (Transmission Control Protocol) (5/5)

Read (socket_read()): 데이터를 받을 때 사용

Write (socket_write()): 데이터를 보낼 때 사용

int socket_read (resource socket_des, string buffer, int length [, int type])

int socket_write (resource socket_des, string &buffer, int length)

Page 18: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 18

TCP 프로그램 예제• ( 앞서의 UDP 와 마찬가지로 ) 클라이언트는 단어들을 서버에 전송하고 ,• 서버에서 이를 정렬하여 다시 클라이언트에 전송하는 프로그램

서버 사이드 : tcp_server.php• 소켓을 생성 (socket_create) 하고 , 바인딩 (socket_bind) 한 후 ,

클라이언트의 접속을 기다리다 (socket_listen), 접속 요청이 오면 수락(socket_accept) 하고 ,

• TCP 로 클라이언트에서 보낸 데이터를 수신 (socket_read) 하고 ,• 이를 단어순으로 정렬 (preg_split, sort) 한 후 ,• 다시 서버로 송신 (socket_write) 한다 .

네트워크 프로그래밍TCP 프로그램 예제 (1/6)

Page 19: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 19

클라이언트 사이드 : tcp_client.php• 소켓을 생성 (socket_create) 하고 , 서버에 접속 (socket_connect) 한 후 ,• TCP 로 서버에 단어들을 송신 (socket_write) 하고 ,• 서버에서 정렬된 순서의 단어들을 수신 (socket_read) 한다 .

네트워크 프로그래밍TCP 프로그램 예제 (2/6)

Page 20: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 20

tcp_server.php

네트워크 프로그래밍TCP 프로그램 예제 (3/6)

<?

$address = "127.0.0.1"; $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>";

Page 21: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 21

tcp_server.php ( 계속 )

네트워크 프로그래밍TCP 프로그램 예제 (4/6)

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);?>

Page 22: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 22

tcp_client.php

네트워크 프로그래밍TCP 프로그램 예제 (5/6)

<? $address = "127.0.0.1"; $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 "connect() failed: reason:" . socket_strerror(socket_last_error()) . "<br>";

echo "Send data: $in<br>";

if(($out = socket_read ($socket, 2048)) == FALSE) echo "connect() failed: reason:" . socket_strerror(socket_last_error()) . "<br>";

echo "Receive data: $out<br>"; socket_close ($socket);?>

Page 23: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 23

실행 결과

네트워크 프로그래밍TCP 프로그램 예제 (6/6)

Page 24: 웹 프로그래밍 및 실습 (Web Programming & Practice) 네트워크 프로그래밍 문양세 강원대학교  IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 24

네트워크 프로그래밍Homework #11 ( 실습 #10)