네트워크 프로그래밍 Yang-Sae Moon Department of Computer Science

Slides:



Advertisements
Similar presentations
Python Socket/HTTP overmania. 목표  소켓을 이용하여 기본적인 서버 - 클라이언트 모델을 구현할 수 있다.  간단한 웹서버를 소켓을 이용하여 작성할 수 있다.
Advertisements

1 안드로이드 네트워킹 안드로이드 앱 프로그래밍 여 규리.
Java Socket 통신 이개혁 정대준.
한남대학교 컴퓨터공학과 소프트웨어공학실험실 최 용 준
Network Lab. Byoung-Son, Choi
WSAAsync Select 김대열 Bit - Academy Sunmoon University, Korea.
Understanding of Socket and File I/O
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
TCP/IP Socket Cover Slide 조태문.
Network Lab. Young-Chul Hwang
TCP Client/Server Program
Department of Computer Science and Engineering
TCP/IP 소켓 프로그래밍 - C 버전 중에서
Sockets Introduction and Protocol Setting
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
PHP 웹 프로그래밍 (PHP Web Programming) 네트워크 프로그래밍 문양세 강원대학교 IT대학 컴퓨터과학전공.
TCP/IP Socket Cover Slide 조태문.
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
Multimedia & Mobile Communications Lab.
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
제 14장 Multicast & Broadcast
네트워킹 CHAPTER 13 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
Department of Computer Engineering
Department of Computer Engineering
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
(Web Programming & Practice)
Department of Computer Engineering
Chapter 21 Network Layer: ARP, ICMP (IGMP).
제 19 장 TFTP 19.1 메시지 19.2 연결 19.3 데이터 전송 19.4 UTP 포트 19.5 TFTP 예제
Department of Computer Engineering
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
ARP Project 조 충 호 교수님 김 세 진 조교님 조 진 형 변 익 수
Understanding of Socket and File I/O
Java의 정석 제 15 장 네트워킹(Networking) Java 정석 남궁성 강의
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
Department of Computer Science and Engineering
Socket Address Structure and Byte Ordering Functions
Socket Address Structure and Byte Ordering Functions
Chapter 5 UDP Socket 소켓 프로그래밍.
I/O&socket통신 POWERPOINT & GROUP STUDY 한재희 김상훈 최기람 황인준 이어진.
Network Security WireShark를 활용한 프로토콜 분석 I.
Sockets Introduction and Protocol Setting
2장. 인터넷의 개념과 주소.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Internet 데이터 전송 목표: 인터넷의 개요 및 기본 내용을 살펴보고 VB에서의 데이터 전송 프로그래밍에 대하여 학습한다. 주요내용 인터넷의 개요 인터넷 데이터 전송 인터넷 프로그래밍 Winsock Client Server 프로그래밍.
Chapter 16 Socket Interface.
Department of Computer Engineering
Department of Computer Engineering
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
자바로 만든 채팅 프로그램 임경진 조주경 지도교수님 : 이광세 교수님.
Understanding of Socket and File I/O
제 19 장 TCP 대화식 데이터 흐름.
Ping Test.
Chapter 27 Mobile IP.
통신프로토콜 전산정보학부 모바일인터넷과 권 춘 우
Chapter 04. TCP 서버/클라이언트.
Chapter 02. 윈도우 소켓 시작하기.
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
다자간 채팅프로그램 김형도 허영민
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
소리가 작으면 이어폰 사용 권장!.
Network Lab. Young-Chul Hwang
Completion Port기반의 채팅프로그램
Department of Computer Engineering
소리가 작으면 이어폰 사용 권장!.
Presentation transcript:

네트워크 프로그래밍 Yang-Sae Moon Department of Computer Science Kangwon National University, Korea

소켓 (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) (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 <? $address = 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() listen() connect() 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) 네트워크 프로그래밍 실행 결과