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

Slides:



Advertisements
Similar presentations
Network Programming:
Advertisements

All Rights Reserved, Copyright© UBIVELOX co.,Ltd LG U+ 과금 API 소개 Version1.0 Authorubivelox Date21-Feb
Python Essential 세미나 1 Socket Programming 발표자 : 임민상 ( 화 )
Python Socket/HTTP overmania. 목표  소켓을 이용하여 기본적인 서버 - 클라이언트 모델을 구현할 수 있다.  간단한 웹서버를 소켓을 이용하여 작성할 수 있다.
TCP 서버/클라이언트 동작 원리 - (1) TCP 서버/클라이언트 예 웹 서버 웹 클라이언트 웹 클라이언트
Chap15 네트워킹 Section 1 : 네트워킹의 개요와 java.net 패키지 Section 2 : 인터넷 주소와 URL
Java Socket 통신 이개혁 정대준.
Chapter 09. 소켓 입출력 모델(I).
Understanding of Socket and File I/O
13장 소켓.
Chapter 06. UDP 서버/클라이언트.
22 장 프로세스간 전달 : UDP와 TCP 22.1 프로세스간 전달 22.2 사용자 데이터그램 프로토콜
TCP/IP Socket Cover Slide 조태문.
TCP Client/Server Program
TCP/IP 소켓 프로그래밍 - C 버전 중에서
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
TCP/IP Socket Cover Slide 조태문.
Web Servers (IIS & Apache)
Department of Computer Engineering
제 18 장 TCP/IP 연결 확립과 종료 정보통신연구실.
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
얇지만 얇지 않은 TCP/IP 소켓 프로그래밍 C 2판
컴퓨터 네트워크 PART 03 프로그래밍 (chapter 01 Socket 프로그래밍) 임효택
Chapter 11. Raw 소켓.
Internet Address Conversion Functions
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
11 소켓 프로그래밍 기초.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
14장 소켓.
18장 Practical Network Project
JAVA 프로그래밍 12장 네트워킹(Networking).
17장 네트워크 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
Choi Seong Yun 네트워크 프로그래밍 Choi Seong Yun
Using Standard I/O on Sockets
명품 JAVA Programming 제 16 장 네트워크.
(Web Programming & Practice)
네트워크 프로그래밍 Yang-Sae Moon Department of Computer Science
Socket Address Structure and Byte Ordering Functions
제 14 장 도메인 네임 시스템 정보통신연구실.
Department of Computer Engineering
Socket Address Structure and Byte Ordering Functions
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Chapter 8 연결형 프로토콜 서버 발표자 : SE Lab 황 성 하
Department of Computer Engineering
Advanced Socket Programming
School of Electronics and Information. Kyung Hee University.
Network Programming(1)
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
소켓의 옵션 School of Electronics and Information. Kyung Hee University.
Chapter 15 Transmission Control Protocol (TCP).
서버 실습 기말과제 게임소프트웨어 b 이도하 Date :2014/12/11(목)
네트워크와 소켓 프로그래밍 Chapter 01. * 학습목표 TCP/IP 프로토콜의 동작 원리를 개관 소켓의 기본 개념을 이해
School of Electronics and Information. Kyung Hee University.
네트워크 프로그래밍의 이해 School of Electronics and Information.
Transmission Control Protocol (TCP)
(Web Programming & Practice)
User Datagram Protocol (UDP)
Chapter 16 Socket Interface.
Department of Computer Engineering
Department of Computer Engineering
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
제 11장 User Datagram Protocol(UDP)
MONSTER CAR 구정재 한석우 김재형.
제 9 장 ICMP 9.1 메시지 유형 9.2 메시지 형식 9.3 오류 보고 9.4 질의 9.5 검사합 9.6 ICMP 설계
Department of Computer Engineering
소켓의 생성과 프로토콜의 설정 School of Electronics and Information.
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
Department of Computer Engineering
Presentation transcript:

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

소켓 (Socket) (1/2) Socket 이란? 네트워크 프로그래밍 Socket 이란? 서버와 클라이언트가 서로 특정한 규약을 사용하여 데이터를 전송하기 위한 방식 서버와 클라이언트는 소켓 연결을 기다렸다가 소켓이 연결되면 서로 데이터를 전송 현재 네트워크 상에서의 모든 통신의 근간은 Socket이라 할 수 있음

자세한 내용은 네트워크 프로그래밍 시간에 학습하세요. 소켓 (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) 자세한 내용은 네트워크 프로그래밍 시간에 학습하세요.

UDP (User Data Protocol) (1/3) 네트워크 프로그래밍 UDP란? 비연결형(connectionless) 통신 프로토콜로서, 비교적 간단한 네트워크 프로그래밍을 할 때 사용함 패킷에 데이터를 실어서 보내는데 데이터를 보내기 전에 서버와 연결을 하기 위한 작업이 생략됨 데이터 전송에 대한 신뢰성을 보장하지 않기 때문에 전송 중에 패킷을 잃어버릴 수 있음 UDP socket_create()에서 type 파라미터는 SOCK_DGRAM을 사용

UDP (User Data Protocol) (1/3) 네트워크 프로그래밍 UDP란? 비연결형(connectionless) 통신 프로토콜로서, 비교적 간단한 네트워크 프로그래밍을 할 때 사용함 패킷에 데이터를 실어서 보내는데 데이터를 보내기 전에 서버와 연결을 하기 위한 작업이 생략됨 데이터 전송에 대한 신뢰성을 보장하지 않기 때문에 전송 중에 패킷을 잃어버릴 수 있음 UDP socket_create()에서 type 파라미터는 SOCK_DGRAM을 사용

UDP (User Data Protocol) (2/3) 네트워크 프로그래밍 UDP 수행(접속) 절차 클라이언트 서버 create() create() bind() sendto() recvfrom() recvfrom() sendto()

상기함수들은 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 버전 등에 따라 달라질 수 있음에 유의하세요.

클라이언트 사이드: udp_client.php 네트워크 프로그래밍 UDP 프로그램 예제 클라이언트는 단어들을 서버에 전송하고, 서버에서 이를 정렬하여 다시 클라이언트에 전송하는 프로그램 서버 사이드: udp_server.php UDP로 클라이언트에서 보낸 데이터를 수신(socket_recvfrom)하고, 이를 단어순으로 정렬(preg_split, sort)한 후, 다시 서버로 송신(socket_sendto)한다. 클라이언트 사이드: udp_client.php UDP로 서버에 단어들을 송신(socket_sendto)하고, 서버에서 정렬된 순서의 단어들을 수신(socket_recvfrom)한다.

UDP 프로그램 예제 (2/5) udp_server.php <? 네트워크 프로그래밍 udp_server.php <? $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); ?>

UDP 프로그램 예제 (3/5) udp_client.php <?PHP 네트워크 프로그래밍 udp_client.php <?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); ?>

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

UDP 프로그램 예제 (5/5) 네트워크 프로그래밍 주의: php_sockets.dll 활성화할 것

TCP (Transmission Control Protocol) (1/5) 네트워크 프로그래밍 TCP란? 연결지향형(connection oriented) 통신 프로토콜이며, 안전한 (reliable) 데이터 전송을 보장해 주는 프로토콜 서버에서 클라이언트의 연결을 기다리는 서버 소켓이 있으며 클라이언트는 미리 정해진 포트를 통해서 서버와 연결 한번 연결된 후에는 소켓을 통해 데이터를 계속해서 송수신할 수 있음 전송되는 데이터는 신뢰성이 보장되어 순서에 상관없이 데이터를 전송받아도 이를 재조합하여 정확한 데이터를 보내고 받을 수 있음 UDP와 다른 점은 서버 쪽에서 연결을 기다린다는 것임

TCP (Transmission Control Protocol) (2/5) 네트워크 프로그래밍 TCP란? (계속) listen() 함수를 이용하여 클라이언트쪽에서 socket_connect() 함수가 올 때까지 서버는 기다리고, socket_connect() 함수가 도착하면 socket_accept()를 보낸 후 데이터 전송을 시작함 socket_close() 함수를 이용하여 연결을 종료함 TCP에서 socket_create() 설정시 type 파라미터는 SOCK_STREAM을 사용함

TCP (Transmission Control Protocol) (3/5) 네트워크 프로그래밍 TCP 수행(접속) 절차 클라이언트 서버 create() create() bind() connect() listen() accept() write() read() read() write()

상기함수들은 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 버전 등에 따라 달라질 수 있음에 유의하세요.

상기함수들은 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 버전 등에 따라 달라질 수 있음에 유의하세요.

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)한다.

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

TCP 프로그램 예제 (3/6) tcp_server.php 네트워크 프로그래밍 <? $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>";

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

TCP 프로그램 예제 (5/6) tcp_client.php 네트워크 프로그래밍 <? $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 "Send data: $in<br>"; if(($out = socket_read ($socket, 2048)) == FALSE) echo "Receive data: $out<br>"; socket_close ($socket); ?>

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

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