명품 JAVA Programming 제 16 장 네트워크.

Slides:



Advertisements
Similar presentations
Python Essential 세미나 1 Socket Programming 발표자 : 임민상 ( 화 )
Advertisements

멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Python Socket/HTTP overmania. 목표  소켓을 이용하여 기본적인 서버 - 클라이언트 모델을 구현할 수 있다.  간단한 웹서버를 소켓을 이용하여 작성할 수 있다.
Chap15 네트워킹 Section 1 : 네트워킹의 개요와 java.net 패키지 Section 2 : 인터넷 주소와 URL Section 3 : TCP 소켓 Section 4 : UDP 소켓.
Chap15 네트워킹 Section 1 : 네트워킹의 개요와 java.net 패키지 Section 2 : 인터넷 주소와 URL
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
목차 소켓이란 무엇인가 Socket클래스의 생성자 소켓에 관한 정보 알아내기 소켓 닫기 소켓 옵션 설정하기 소켓 예외
Network Socket Programming java.net.Socket java.net.ServerSocket
10장 URLConnection 클래스 홍창범 시스템 소프트웨어 연구실 System Software Lab.
[ 단원 11 ] 입출력과 네트워크.
Java Socket 통신 이개혁 정대준.
네트워크 프로그래밍 Youngnam Kim.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
제9장 입출력과 JNI.
Understanding of Socket and File I/O
Asymmetric Link 분석.
8장. 네트워크 프로그래밍 /*컴퓨터 네트워크 프로그래밍 -김화종 저- 참조 */
제14장 원격 메소드 호출 김 기 환. 조 명 휘.
제 4장 문 장 배정문 혼합문 제어문 표준 입출력.
명품 JAVA Programming.
자바 서버 API와 서블릿 데이타베이스 실험실 이찬섭, 박용문.
5 익셉션 처리.
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
PHP 웹 프로그래밍 (PHP Web Programming) 네트워크 프로그래밍 문양세 강원대학교 IT대학 컴퓨터과학전공.
Chap11 네트워킹 11.1 네트워킹의 개요와 java.net 패키지 11.2 인터넷 주소와 URL 11.3 TCP 소켓
Network 네트워크 이론 및 실습 TCP / IP 4장.
10. About TCP / IP SPARCS 08 우성필.
메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈
임베디드 프로그래밍 Lecture #
네트워크 보안 TCP/IP 네트워크통신 개념.
8장 자바 입출력.
Chapter 14. 입출력 스트림.
Network Lab. Seoung Hyeon, Lee
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
JAVA 프로그래밍 12장 네트워킹(Networking).
10장 SafeTalk 시스템 소프트웨어 연구실 성순화 이재일
명품 JAVA Programming 제 8 장 입출력 스트림과 파일 입출력.
자바 5.0 프로그래밍.
17장 네트워크 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
명품 JAVA Programming 제 16 장 네트워크.
Choi Seong Yun 네트워크 프로그래밍 Choi Seong Yun
명품 JAVA Essential.
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
Hadoop 김연왕
강의 보조자료 & Homework #2 - 로그인과 이미지 카운터 만들기 -
(Web Programming & Practice)
Access Control Lists Access Control List
Network Programming Version 2.1.
Department of Computer Engineering
중간 결과 보고 ( Server & Client )
주소록 프로그램.
Network Programming(1)
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
15장 네트워킹 15.1 네트워킹의 개요와 java.net 패키지 15.2 인터넷 주소와 URL 15.3 TCP 소켓
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
네트워크와 소켓 프로그래밍 Chapter 01. * 학습목표 TCP/IP 프로토콜의 동작 원리를 개관 소켓의 기본 개념을 이해
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
1 학습 목표 네트워크의 기초 네트워크 관련 기초 용어를 익힌다.
자바 암호 프로그래밍 Java Cryptography Programming
컴퓨터공학실습(I) 3주 인공지능연구실.
Network.
기술가정 2학년 2학기 4.컴퓨터와 생활 > 2) 인터넷의 활용 > 1/7 인터넷이란 무엇일까.
초기화면 인터넷의 이해 Ⅳ. 컴퓨터와 생활> 2. 인터넷의 활용> 기술·가정 2학년 2학기
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
C# 10장. 참조형.
제 14 장 응용 계층과 클라이언트-서버 모델 클라이언트-서버 모델 14.2 동시성 14.3 프로세스 14.4 요약.
Department of Computer Engineering
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

명품 JAVA Programming 제 16 장 네트워크

TCP/IP 소개 TCP 프로토콜 IP TCP는 Transmission Control Protocol 두 시스템 간에 신뢰성 있는 데이터의 전송을 관장하는 프로토콜 TCP에서 동작하는 응용프로그램 사례 e-mail, FTP, 웹(HTTP) 등 IP Internet Protocol 패킷 교환 네트워크에서 송신 호스트와 수신 호스트가 데이터를 주고 받는 것 을 관장하는 프로토콜 TCP보다 하위 레벨 프로토콜 응용프로그램 (HTTP, e-mail, FTP, 등) Transport (TCP, …) Network (IP, …) Link (디바이스 드라이버, …) 네트워크 계층

IP 주소 IP 주소 네트워크 상에서 유일하게 식별될 수 있는 컴퓨터 주소 숫자로 구성된 주소 4개의 숫자가 ‘.’으로 연결 예) 192.156.11.15 숫자로 된 주소는 기억하기 어려우므로 www.naver.com과 같은 문자열로 구성된 도메인 이름으로 바꿔 사용 DNS(Domain Name Server) 문자열로 구성된 도메인 이름을 숫자로 구성된 IP 주소로 자동 변환 현재는 32비트의 IP 버전 4(IPv4)가 사용되고 있음 IP 주소 고갈로 인해 128비트의 IP 버전 6(IPv6)이 점점 사용되는 추 세

내 컴퓨터의 IP 주소 확인하기 내 컴퓨터의 윈도우에서 명령창을 열어 ipconfig 명령 수행

포트 포트 통신하는 프로그램 간에 가상의 연결단인 포트 생성 모든 응용프로그램은 하나 이상의 포트 생성 가능 IP 주소는 네트워크 상의 컴퓨터 또는 시스템을 식별하는 주소 포트 번호를 이용하여 통신할 응용프로그램 식별 모든 응용프로그램은 하나 이상의 포트 생성 가능 포트를 이용하여 상대방 응용프로그램과 데이터 교환 잘 알려진 포트(well-know ports) 시스템이 사용하는 포트 번호 잘 알려진 응용프로그램에서 사용하는 포트 번호 0부터 1023 사이의 포트 번호 ex) 텔넷 23, HTTP 80, FTP 21 잘 알려진 포트 번호는 개발자가 사용하지 않는 것이 좋음 충돌 가능성 있음

포트를 이용한 통신

URL을 이용한 웹 프로그래밍 URL이란? URL 구조 URL은 Uniform Resource Locator 인터넷 상의 리소스에 대한 주소 URL 구조

웹 브라우저 주소창의 URL URL

프로토콜 식별자 프로토콜 식별자 대부분의 브라우저들은 HTTP 외 다른 프로토콜도 지원 인터넷상의 자원을 가져올 때 사용되는 통신 프로토콜 이름 종류 HTTP, FTP, TELNET 대부분의 브라우저들은 HTTP 외 다른 프로토콜도 지원

자원 이름 자원 이름 자원 이름은 사용되는 프로토콜에 따라서 그 구성이 달라짐 HTTP의 경우

자바의 URL 클래스 URL 클래스 java.net 패키지에 포함 웹 상의 자원을 지정하는 URL을 나타냄 생성자 설명 URL(String spec) 문자열이 지정하는 자원에 대한 URL 객체를 생성 URL(String protocol, String host, int port, String file) 프로토콜 식별자, 호스트 주소, 포트 번호, 파일 이름이 지정하는 자원에 대한 URL 객체 생성 URL(String protocol, String host, String file) 프로토콜 식별자, 호스트 주소, 파일 이름이 지정하는 자원에 대한 URL 객체 생성 URL(URL context, String spec) URL 객체 context에 대한 상대 경로가 지정하는 자원에 대한 URL 객체 생성

자바의 URL 클래스 주요 메소드 메소드 설명 Object getContent() URL의 컨텐트를 반환 String getFile() URL 주소의 파일 이름 반환 String getHost() URL 주소의 호스트 이름 반환 String getPath() URL 주소의 경로 부분 반환 int getPort() URL 주소의 포트 번호 반환 int getLocalPort() 소켓이 연결된 로컬 포트 번호 반환 소켓이 연결한 서버의 포트 번호 반환 InputStream openStream() URL에 대해 연결을 설정하고 이 연결로부터 입력을 받을 수 있는 InputStream 객체 반환 URLConnection openConnection() URL 주소의 원격 객체에 접속한 뒤 통신할 수 있는 URLConnection 객체 리턴

URL 객체 생성 방법 절대 경로로 URL 객체 생성 상대 경로로 URL 객체 생성 잘못된 주소의 URL을 입력하면 MalformedURLException 예외 발 생 URL homePage = new URL("http://news.hankooki.com"); URL opinion = new URL(homePage, "opinion/editorial.htm"); opinion이라는 URL은 결국 다음 주소 의미 "http://news.hankooki.com/opinion/editorial.htm"

예제 16-1 : URL 파싱하기 URL 클래스를 이용하여 URL을 구성하는 프로토콜 이름, 호스트 주소, 포트 번호 등 각 부분을 파싱해보자 import java.net.*; public class ParseURL { public static void main(String[] args) { URL opinion = null; URL homePage = null; try { homePage = new URL("http://news.hankooki.com:80"); // 절대 경로로 URL 객체 생성 opinion = new URL(homePage,“opinion/editorial.htm"); // 상대 경로로 URL 객체 생성 } catch (MalformedURLException e) { System.out.println("잘못된 URL입니다."); } System.out.println("protocol = " + opinion.getProtocol()); // 프로토콜 출력 System.out.println("host = " + opinion.getHost()); // 호스트 이름 출력 System.out.println("port = " + opinion.getPort()); // 포트 번호 출력 System.out.println("path = " + opinion.getPath()); // 경로 부분 출력 System.out.println("filename = " + opinion.getFile()); // 파일 이름 출력 protocol = http host = news.hankooki.com port = 80 path = /opinion/editorial.htm filename = /opinion/editorial.htm

URL 객체를 이용하여 상대편으로부터 데이터 읽기 URL 객체가 가리키는 주소에서 데이터를 가져올 때는 openStream() 메소드로 스트림 생성 openStream()이 리턴하는 InputStream 객체를 이용하여 일반 스트 림 입력을 수행

예제 16-2 : URL 주소에서 데이터 읽기 http 프로토콜로 www.nate.com 사이트에 접속한 뒤 www.nate.com에서 보내주는 웹 페이지를 받아보자. import java.net.*; import java.io.*; public class URLRead { public static void main(String[] args) { try { // URL 객체 생성 URL aURL = new URL("http://www.nate.com"); // URL 객체에서 입력 스트림 생성 BufferedReader in = new BufferedReader(new InputStreamReader( aURL.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) // 한행 씩 읽음 System.out.println(inputLine); in.close(); } catch (IOException e) { System.out.println("URL에서 데이터를 읽는 중 오류가 발생했습니다."); }

URLConnection 클래스 URLConnection 클래스 URL.openConnection() 이용 URLConnection 생성자 이용 연결하기 전에 여러 가지 인자들과 요청과 관련된 속성들을 설정 가능 URL aURL = new URL("http://www.naver.com"); URLConnection uc = aURL.openConnection(); // 원격지와 연결한다. URL aURL = new URL("http://www.naver.com"); URLConnection uc = new URLConnection(aURL); uc.connect(); // 원격지와 연결한다.

URLConnection 클래스 주요 메소드 설명 abstract void connect() URL에 의해 참조되는 외부 리소스와 통신 연결 설정 Object getContent() URL 연결에서 컨텐트를 가져옴 String getContentEncoding() 컨텐트 인코딩 필드를 반환 int getContentLength() 컨텐트 길이 필드 반환 String getContentType() 컨텐트 타입 필드 반환 boolean getDoInput() URLConnection 객체의 doInput 필드 값 반환 boolean getDoOutput() URLConnection 객체의 doOutput 필드 값 반환 InputStream getInputStream() 설정된 연결에서 데이터를 읽을 입력 스트림 반환 OutputStream getOutputStream() 설정된 연결로 데이터를 출력할 출력 스트림 반환 URL getURL() URLConnection 객체의 URL 필드 값 반환 void setDoInput(boolean doInput) URLConnection 객체의 doInput 필드 값 설정 void setDoOutput(boolean doOutput) URLConnection 객체의 doOutput 필드 값 설정 doInput 필드가 true로 설정되면 URLConnection 객체로 표현되는 URL 연결이 입력을 위해 사용됨을 의미. doOutput 필드가 true로 설정되면 출력을 위해 사용됨을 의미

URLConnection 객체를 이용하여 원격지 데이터 받기 URLConnection 객체에서 getInputStream() 메소드를 이용하여 입 력 스트림을 얻은 후에 스트림 입력을 수행

예제 16-3 : URLConnection으로 원격지에서 데이터 읽기 URLConnection 객체를 이용하여 www.daum.net에 연결하여 데이터를 읽고 화면에 출력하는 프로그램을 작성하라. import java.io.*; import java.net.*; public class URLConnectionReader { public static void main(String[] args) { try { // URL 객체 생성 URL aURL = new URL("http://www.daum.net"); // URL 객체에서 URLConnection 객체 생성 URLConnection uc = aURL.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader( uc.getInputStream())); // 입력 스트림 생성 String inputLine; while ((inputLine = in.readLine()) != null) // 한행 씩 읽음 System.out.println(inputLine); in.close(); } catch (IOException e) { System.out.println("URL에서 데이터를 읽는 중 오류가 발생했습니다."); }

URLConnection 객체를 이용하여 원격지로 데이터 보내기 웹 서버에 데이터를 요청하여 읽어올 때 주로 HTTP GET 방법 사용 웹 서버에 데이터를 요청할 때 같이 처리될 데이터를 보낼 때 HTTP POST HTTP POST를 이용하면 서버에 폼 (form) 데이터나 파일을 업로드할 수 있음 요청과 같이 보내진 데이터를 서버가 처리하여 응답을 다시 클라이언트에 보냄 URLConnection 객체는 HTTP POST 방식으로 서버에 데이터 전송

HTTP POST 사례 성과 이름을 입력하는 필드가 폼(form) 필드에 데이터를 입력한 후 "go" 버튼을 누르면 웹 서버로 데이터를 전송해야 하는데 이 데이터를 보내는 방법이 HTTP POST

서버에 데이터를 보내기 위한 단계 자바 프로그램이 웹 서버에 데이터를 보내기 위해서 필요한 단계 URL 생성 URL 객체에서 URLConnection 객체를 얻어온다. setDoOutput() 메소드로 doOutput 필드를 true로 설정 connect() 메소드로 연결 설정 연결에서 출력 스트림을 얻어 온다. 출력 스트림에 데이터를 출력. 출력 스트림을 닫는다.

예제 16-4 : URLConnection을 이용하여 웹 서버에 데이터 보내기 import java.io.*; import java.net.*; public class URLConnectionWriter { public static void main(String[] args) { try { // POST가 가능한 사이트 URL 객체 생성 URL aURL = new URL("http://www.snee.com/xml/crud/posttest.cgi"); URLConnection uc = aURL.openConnection(); // URLConnection 객체 생성 uc.setDoOutput(true); // 출력 모드 설정 OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream()); // 출력 스트림 생성 out.write("fname=Kitae&lname=Hwang"); // 서버에 데이터 보내기 out.close(); BufferedReader in = new BufferedReader( new InputStreamReader(uc.getInputStream())); // 입력 스트림 생성 String inputLine; while ((inputLine = in.readLine()) != null) // 한행 씩 읽음 System.out.println(inputLine); in.close(); } catch (IOException e) { System.out.println("URL에 데이터를 입출력 중에 오류가 발생했습니다."); }

소켓 프로그래밍 소켓 (socket) 소켓은 네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 한쪽 끝 단을 의미 소켓은 네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 한쪽 끝 단을 의미 소켓은 특정 포트 번호와 연결되어 있음 TCP에서 데이터를 보낼 응용프로그램을 식별할 수 있음. 자바에서의 데이타 통신 시 소켓 사용 소켓 종류 서버 소켓과 클라이언트 소켓 인터넷 포트 웹 서 버 웹 브라우저 80 4289 소켓

소켓을 이용한 서버 클라이언트 통신 프로그램의 구조

Socket 클래스, 클라이언트 소켓 Socket 클래스 클라이언트 소켓에 사용되는 클래스 java.net 패키지에 포함 주요 생성자 생성자 설명 Socket(InetAddress address, int port)  소켓을 생성하여 지정된 IP 주소와 포트 번호에 연결한다. Socket(String host, int port) 소켓을 생성하여 지정된 호스트와 포트 번호에 연결한다. 호스트 이름이 null인 경우는 루프백(loopback) 주소로 가정한다.

Socket 클래스, 클라이언트 소켓 주요 메소드 메소드 설명 void close() 소켓을 닫는다. void connect(SocketAddress endpoint) 소켓을 서버에 연결 InetAddress getInetAddress() 소켓이 연결한 서버의 주소 반환 InputStream getInputStream() 소켓에 대한 입력 스트림 반환 InetAddress getLocalAddress() 소켓이 연결된 로컬 주소 반환 int getLocalPort() 소켓이 연결된 로컬 포트 번호 반환 int getPort() 소켓이 연결한 서버의 포트 번호 반환 OutputStream getOutputStream() 소켓에 대한 출력 스트림 반환 boolean isBound() 소켓이 로컬 주소에 연결되어있으면 true 반환 boolean isConnected() 소켓이 서버에 연결되어 있으면 true 반환 boolean isClosed() 소켓이 닫혀있으면 true 반환 void setSoTimeout(int timeout) 데이터 읽기 타임아웃 시간 지정. 0이면 타임아웃 해제.

소켓 생성, 서버 접속, 입출력 스트림 생성 클라이언트 소켓 생성 및 서버에 접속 네트워크 입출력 스트림 생성 클라이언트 소켓 생성 및 서버에 접속 Socket 객체의 생성되면 곧 바로 128.12.1.1의 주소로 자동 접속 네트워크 입출력 스트림 생성 일반 스트림을 입출력 하는 방식과 동일 서버로 데이터 전송 flush()를 호출하면 스트림 속에 데이터를 남기지 않고 모두 전송 서버로부터 데이터 수신 네트워크 접속 종료 Socket clientSocket = new Socket("128.12.1.1", 5550); BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); BufferedWriter out = new BufferedWriter( new OutputStreamWriter(clientSocket.getOutputStream())); out.write("hello"+"\n"); out.flush(); int x = in.read(); // 서버로부터 한 개의 문자 수신 String line = in.readline(); //서버로부터 한 행의 문자열 수신 clientSocket.close();

ServerSocket 클래스, 서버 소켓 ServerSocket 클래스 서버 소켓에 사용되는 클래스 java.net 패키지에 포함 주요 생성자 주요 메소드 생성자 설명 ServerSocket(int port)  소켓을 생성하여 지정된 포트 번호에 연결한다. 메소드 설명 Socket accept() 연결 요청을 기다리다 연결 요청이 들어오면 수락하고 새 Socket 객체를 반환 void close() 서버 소켓을 닫는다. InetAddress getInetAddress() 서버 소켓에 연결된 로컬 주소 반환 int getLocalPort() 서버 소켓이 연결 요청을 모니터링하는 포트 번호 반환 boolean isBound() 서버 소켓이 로컬 주소에 연결되어있으면 true 반환 boolean isClosed() 서버 소켓이 닫혀있으면 true 반환 void setSoTimeout(int timeout) accept()에 대한 타임 아웃 시간 지정. 0이면 타임아웃이 해제.

클라이언트와 서버 연결 순서 클라이언트와 서버 연결 서버는 서버 소켓으로 들어오는 연결 요청을 기다림 클라이언트가 서버에게 연결 요청 서버가 연결 요청 수락하고 새로운 소켓을 만들어 클라이언트와 연결 생성 서버 포트 listen 서버 포트 listen 포트 클라이언트 연결 요청 서버 포트 listen 포트 클라이언트 연결

소켓 생성, 클라이언트 접속, 입출력 스트림 생성 서버 소켓 생성 클라이언트로부터 접속 기다림 네트워크 입출력 스트림 생성 이미 사용 중인 포트 번호를 지정하면 오류가 발생 클라이언트로부터 접속 기다림 accept() 메소드는 연결 요청이 오면 새로운 Socket 객체 반환 서버에서 클라이언트와의 데이터 통신은 새로 만들어진 Socket 객체를 통해서 이루어짐 ServerSocket 클래스는 Socket 클래스와 달리 주어진 연결에 대해 입출 력 스트림을 만들어주는 메소드가 없음 네트워크 입출력 스트림 생성 accept() 메소드에서 얻은 Socket 객체의 getInputStream()과 getOutputStream() 메소드를 이용하여 데이터 스트림 생성 일반 스트림을 입출력하는 방식과 동일하게 네트워크 데이터 입출력 ServerSocket serverSocket = new ServerSocket(5550); Socket socket = serverSocket.accept(); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

클라이언트로 데이터 송수신 클라이언트로부터 데이터 수신 클라이언트로 데이터 전송 네트워크 접속 종료 서버 응용프로그램 종료 flush()를 호출하면 스트림 속에 데이터를 남기지 말고 모두 전송 네트워크 접속 종료 서버 응용프로그램 종료 더 이상 클라이언트의 접속을 받지 않고 서버 응용 프로그램을 종료 하고자 하는 경우 ServerSocket 종료 int x = in.read(); // 클라이언트로부터 한 개의 문자 수신 String line = in.readline(); //클라이언트로부터 한 행의 문자열 수신 out.write("Hi!, Client"+"\n"); out.flush(); socket.close(); serverSocket.close();

소켓을 이용한 클라이언트/서버 채팅 예제 간단한 채팅 프로그램 예제 서버와 클라이언트가 1:1로 채팅 하는 간단한 예제 서버와 클라이언트 간의 메시지 구분을 위해 서버는 메시지 앞에 “서버>”을 접두어로 붙여 메시지를 전송하며 클라이언트는 “클 라이언트>”를 접두어로 붙여 메시지 전송 서버와 클라이언트가 번갈아 가면서 메시지 전송 및 수신 클라이언트가 bye를 보내면 프로그램 종료

서버 프로그램 서버 소켓 생성 클라이언트 요청 대기 시스템에서 사용되지 않은 포트 번호로 서버 소켓 생성 클라이언트가 연결 요청이 올 때까지 소켓 기다림 해당 포트 번호로 연결 요청이 오면 수락과 함께 새로운 소켓을 생성 새 소켓으로 클라이언트와 통신 새로운 소켓의 포트 번호는 자동으로 할당 ServerSocket listener = new ServerSocket(9999); Socket socket = listener.accept();

서버 프로그램 클라이언트와 통신을 위한 입출력 스트림 생성 클라이언트의 데이터 수신 스트림을 생성하여 클라이언트와 데이터 송수신 데이터의 종류에 따라 바이트 스트림 또는 문자 스트림을 생성 채팅과 같이 문자열을 송수신하는 경우는 문자 스트림 사용 효율적 입출력을 위하여 버퍼 스트림(Buffered Stream) 사용 클라이언트의 데이터 수신 스트림 생성 이후는 데이터 입력 받는 방법과 동일 클라이언트에서 한 행의 문자열을 보내올 때까지 기다림 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String inputMessage = in.readLine();

서버 프로그램 클라이언트에 데이터 송신 연결 종료 스트림 생성 이후는 일반 데이터를 출력하는 방법과 동일 콘솔에서 입력 받은 문자열을 클라이언트로 송신 flush() 메소드로 스트림의 모든 데이터를 클라이언트로 송신 연결 종료 데이터의 송수신이 끝나면 소켓을 닫아야 함 소켓을 닫으면 소켓의 입출력 스트림도 같이 닫힘 서버 소켓을 닫으면 클라이언트 연결 요청을 받을 수 없음 String outputMessage = stin.readLine(); out.write("서버>" + outputMessage+"\n"); out.flush(); socket.close(); listener.close();

클라이언트 프로그램 연결 요청 클라이언트와 통신을 위한 입출력 스트림 생성 소켓 생성 서버의 호스트 주소 서버가 연결 요청을 모니터링하는 포트 번호로 소켓 생성 예제는 호스트 이름을 “localhost”로 지정 동일한 시스템에서 서버와 클라이언트가 동작하기 때문 클라이언트와 통신을 위한 입출력 스트림 생성 스트림을 생성하여 서버와 데이터 송수신 데이터의 종류에 따라 바이트 스트림 또는 문자 스트림 사용 채팅과 같이 문자열을 송수신하는 경우는 문자 스트림 사용 효율적 입출력을 위하여 버퍼 스트림(Buffered Stream) 사용 socket = new Socket("localhost", 9999); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

클라이언트 프로그램 서버에 데이터 송신 클라이언트의 데이터 수신 연결 종료 스트림 생성 이후는 데이터 출력 방법과 동일 콘솔에서 입력 받은 문자열을 서버로 송신 flush() 메소드로 스트림의 모든 데이터를 서버로 송신 클라이언트의 데이터 수신 스트림 생성 이후는 데이터 입력 방법과 동일 서버에서 한 행의 문자열을 보내올 때까지 기다림 연결 종료 데이터의 송수신이 끝나면 소켓을 닫아야 함 소켓을 닫으면 소켓의 입출력 스트림도 같이 닫힘 String outputMessage = stin.readLine(); out.write("클라이언트>"+outputMessage+"\n"); out.flush(); String inputMessage = in.readLine(); socket.close();

예제 실행 서버 프로그램을 먼저 실행시켜 서버 소켓으로 연결 요 청을 모니터링 하며 대기 서버

예제 실행 클라이언트 프로그램을 실행하여 서버와 연결을 설정 클라이언트 서버

예제 실행 클라이언트에서 먼저 시작하여 번갈아 가면서 순서대로 메시지를 주고받도록 한다. 서버 클라이언트

예제 실행 클라이언트에서 bye를 입력하여 채팅 종료 클라이언트 서버

UDP 프로토콜 UDP란? 연결설정이 없는 비연결형 통신모델 짧은 정보의 빠른 통신에 사용 UDP 헤더 포맷

비연결형 소켓 클래스와 UDP 프로토콜 비연결형 소켓 클래스

UDP 프로그래밍 UDP 프로토콜의 동작 원리

UDP 프로그래밍 서버 측에서는 먼저 java.net 패키지에 포함되어 있는 DatagramSocket, DatagramPacket 클래스를 생성한다. TCP처럼 클라이언트 측으로부터의 새로운 연결 을 얻기 위한 accept( ) 메소드 사용 등은 필요가 없다. 클라이언트 측에서도 java.net 패키지에 포함되어 있는 DatagramSocket, DatagramPacket 클래스를 생성한다. 서버 측에서는 클라이언트 측과 정보를 송수신하기 위 하여 상대 측에게 보낼 때는 send( ) 메소드를 사용하고, 상대 측으로부터 받을 때는 receive( ) 메소드를 사용한 다. 클라이언트 측에서는 서버 측과 정보를 송수신하기 위 하여 상대측에 보낼 때는 send( ) 메소드를 사용하고, 상 대 측으로부터 받을 때는 receive( ) 메소드를 사용한다.

UDP 서버

UDP 클라이언트

실행 결과 세션을 맺지 않고 한 문장을 보내고 완료. 매번 송신시마다 포트번호를 새로 발급받음.