<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Similar documents
Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - 03-TCP Programming.ppt

자바-11장N'1-502

13-Java Network Programming

학습목표 네트워크개요 TCP PORT URL/InetAddress Socket/TCP 을이용한네트워크 2

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

rmi_박준용_final.PDF

Microsoft PowerPoint - java2-lecture7.ppt [호환 모드]

PowerPoint 프레젠테이션

PowerPoint Presentation

12-file.key

<4D F736F F F696E74202D20B3D7C6AEBFF6C5A9C7C1B7CEB1D7B7A1B9D65F FBCD2C4CF5FC3A4C6C35FBFA1C4DA2E BC8A3C8A

(Microsoft PowerPoint - AUTCHEYREGRG.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - [EEL2] Lab10.pptx

쉽게 풀어쓴 C 프로그래밊

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Java

16장

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

PowerPoint 프레젠테이션

PowerPoint Presentation

Cluster management software

Microsoft PowerPoint - Java7.pptx

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

Network Programming

PowerPoint Presentation

PowerPoint Presentation

Network Programming

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to TCP/IP Sockets: C Version

FileMaker ODBC 및 JDBC 가이드

JAVA PROGRAMMING 실습 09. 예외처리

The Pocket Guide to TCP/IP Sockets: C Version

FileMaker 15 ODBC 및 JDBC 설명서

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

class InetAddress3{ public static void main(string[] args) throws Exception{ String url = null ; Scanner reader = new Scanner(System.in); System.out.p

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint Presentation

4장.문장

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

제11장 프로세스와 쓰레드

제1장 자바 언어 소개

JAVA PROGRAMMING 실습 08.다형성

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

02 C h a p t e r Java

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Java ...

FileMaker ODBC and JDBC Guide

JMF2_심빈구.PDF

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

Spring Boot/JDBC JdbcTemplate/CRUD 예제

쉽게 풀어쓴 C 프로그래밍

SMB_ICMP_UDP(huichang).PDF

14-Servlet

gnu-lee-oop-kor-lec06-3-chap7

JMF3_심빈구.PDF

mytalk

Semantic Consistency in Information Exchange

Chap12

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

Microsoft PowerPoint - RMI.ppt

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

FileMaker ODBC and JDBC Guide

PowerPoint 프레젠테이션

Design Issues

제11장 자바 입출력

PowerPoint 프레젠테이션

3ÆÄÆ®-11

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

歯NetworkKawuiBawuiBo.PDF

USB USB DV25 DV25 REC SRN-475S REC SRN-475S LAN POWER LAN POWER Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl C

2009년 상반기 사업계획

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint Presentation

JAVA PROGRAMMING 실습 05. 객체의 활용

쉽게 풀어쓴 C 프로그래밍

교육자료

제20회_해킹방지워크샵_(이재석)

MasoJava4_Dongbin.PDF

쉽게

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

untitled

비긴쿡-자바 00앞부속

제1장 Unix란 무엇인가?

(Microsoft PowerPoint - Chapter17 RMI.ppt [\310\243\310\257 \270\360\265\345])

05-class.key

PowerPoint Presentation

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Transcription:

Power Java 제 25 장네트워크프로그래밍 이번장에서학습할내용 네트워크프로그래밍의개요 URL 클래스 TCP를이용한통신 TCP를이용한서버제작 TCP를이용한클라이언트제작 UDP 를이용한통신 자바를이용하여서 TCP/IP 통신을이용하는응응프로그램을작성하여봅시다.

서버와클라이언트 서버 (Server): 사용자들에게서비스를제공하는컴퓨터 클라이언트 (Client): 서버에게서비스를요청해서사용하는컴퓨터 ( 예 ) 웹서버와클라이언트 IP 주소 IP 주소 : 인터넷에서컴퓨터의주소

포트 포트 (port): 가상적인통신선로 호스트이름, DNS, URL DNS(Domain Name System): 숫자대신기호를사용하는주소 DNS 서버 : 기호주소를숫자주소가변환해주는서버 URL(Uniform Resource Locator): 인터넷상의자원을나타내는약속

프로토콜 프로토콜 (protocol): 통신을하기위한약속 TCP TCP(Transmission Control Protocol) 는신뢰성있게통신하기위하여먼저서로간에연결을설정한후에데이터를보내고받는방식

UDP UDP(User Datagram Protoocol) 는데이터를몇개의고정길이의패킷 ( 다이어그램이라고불린다 ) 으로분할하여전송 자바와네트워크 네트워크프로그래밍을위한패키지는 java.net TCP를위한클래스 URL URLConnection Socket ServerSocketS UDP 를위한클래스 DatagramPacket DatagramSocket MulticastSocket ts t

중간점검문제 1. IP 주소와도메인이름은어떻게다른가? 2. 전화와비슷한전송프로토콜은 이고편지와비숫한프로토콜은 이다. 3. TCP/IP 에서자신을가리키는주소는? URL 클래스 URL java = new URL("http://java.sun.com");// 절대경로 URL reference = new URL(java, "reference.html");// 상대경로

예제 import java.net.*; import java.io.*; public class ParseURLExample { public static void main(string[] args) throws Exception { URL myurl = new URL("http://java.sun.com:80/docs/books/tutorial" + "/index.html?name=database#top"); System.out.println("protocol = " + myurl.getprotocol()); System.out.println("authority = " + myurl.getauthority()); System.out.println("host = " + myurl.gethost()); System.out.println("port = " + myurl.getport()); System.out.println("path = " + myurl.getpath()); System.out.println("query = " + myurl.getquery()); System.out.println("filename = " + myurl.getfile()); System.out.println("ref = " + myurl.getref()); 예제 protocol = http authority = java.sun.com:80 host = java.sun.com port = 80 path = /docs/books/tutorial/index.html query = name=database filename = /docs/books/tutorial/index.html?name=database ref = TOP

Socket 클래스 소켓 (socket): TCP 를사용하여응용프로그램끼리통신을하기위한연결끝점 (end point) ServerSocket 과 Socket ServerSocket 클래스 : 서버를위한소켓 소켓의종류 Socket 클래스 : 클라이언트를위한소켓

Socket 클래스 ServerSocket 클래스

소켓을이용한서버제작 1. ServerSocket 객체생성 ServerSocket server = new ServerSocket(portNumber, queuelength); 2. accept() 메소드호출 Socket clientsocket = server.accept(); 3. 소켓으로부터스트림객체를얻는다. InputStream input = clientsocket.getinputstream(); OutputStream output = clientsocket.getoutputstream(); 4. 상호대화단계 read() 와 write() 사용 5. 종료 close() 사용 TCP 예제 : 퀴즈서버와클라이언트 퀴즈클라이언트 : 퀴즈에대한답을보낸다. 퀴즈서버 : 퀴즈를출제한다.

QuizServer import java.net.*; import java.io.*; public class QuizServer { public static void main(string[] args) throws IOException { ServerSocket serversocket = null; try { serversocket = new ServerSocket(5555); catch (IOException e) { System.err.println(" 다음의포트번호에연결할수없습니다 : 5555"); System.exit(1); Socket clientsocket = null; try { clientsocket = serversocket.accept(); catch (IOException e) { System.err.println("accept() 실패 "); System.exit(1); QuizServer PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader( clientsocket.getinputstream())); String inputline, outputline; QuizProtocol qp = new QuizProtocol(); outputline = qp.process(null); out.println(outputline); while ((inputline = in.readline())!= null) { outputline = qp.process(inputline); out.println(outputline); p if (outputline.equals("quit")) break; out.close(); in.close(); clientsocket.close(); serversocket.close();

예제 서버만작성되었고클라이언트가없으니결과는아직없습니다. QuizProtocol 클래스 class QuizProtocol { private static final int WAITING = 0; private static final int PROBLEM = 1; private static final int ANSWER = 2; private static final int NUMPROBLEMS = 3; private int state = WAITING; private int currentproblem = 0; private String[] problems = { " 네트워크처리패키지는?", " 자바의최신버전은?", " 인터넷에서컴퓨터를식별하는주소는?" ; private String[] answers = { "java.io", "1.6", "IP 주소 " ;

QuizProtocol 클래스 public String process(string theinput) { String theoutput = null; if (state == WAITING) { theoutput = " 퀴즈를시작합니다 (y/n)"; state = PROBLEM; else if (state == PROBLEM) { if (theinput.equalsignorecase( equalsignorecase("y")) { theoutput = problems[currentproblem]; state = ANSWER; else { state = WAITING; theoutput = "quit"; else if (state == ANSWER) { if (theinput.equalsignorecase(answers[currentproblem])) { theoutput = " 정답입니다. 계속하시겠습니까? (y/n)"; state = PROBLEM; else { state = PROBLEM; theoutput = " 오답입니다. 계속하시겠습니까? (y/n)"; currentproblem = (currentproblem+1)% NUMPROBLEMS; return theoutput; import java.io.*; import java.net.*; QuizlClient 클래스 public class QuizClient { public static void main(string[] args) throws IOException { Socket quizsocket = null; PrintWriter out = null; BufferedReader in = null; try { quizsocket = new Socket("localhost", 5555); out = new PrintWriter(quizSocket.getOutputStream(), true); in = new BufferedReader(new d InputStreamReader(quizSocket S t.getinputstream())); catch (UnknownHostException e) { System.err.println("localhost localhost 에접근할수없습니다."); System.exit(1); catch (IOException e) { System.err.println(" 입출력오류 "); System.exit(1);

QuizlClient 클래스 BufferedReader user = new BufferedReader(new InputStreamReader( System.in)); String fromserver; String fromuser; while ((fromserver = in.readline())!= null) ) { System.out.println(" 서버 : " + fromserver); if (fromserver.equals("quit")) break; fromuser = user.readline(); if (fromuser!= null) { System.out.println(" 클라이언트 : " + fromuser); out.println(fromuser); out.close(); in.close(); quizsocket.close(); 서버와클라이언트의실행 두개의프로그램을동시에실행하여야한다. 서버 : 퀴즈를시작합니다 (y/n) y 클라이언트 : y 서버 : 네트워크처리패키지는? java.io 클라이언트 : java.io 서버 : 정답입니다. 계속하시겠습니까? (y/n) n 클라이언트 : n 서버 : quit

다중클라이언트를지원하려면 각각의클라이언트를별도의스레드로처리하여야한다 while(true){ 연결요청을수락한다 ; 클라이언트를대응하는쓰레드를만든다 ; UDP 를이용한서버와클라이언트 DatagramSocket 클래스 DatagramSocket() 은 UDP 프로토콜을사용하는소켓을생성 DatagramPacket 클래스 DatagramPacket() t() 은 UDP 패킷을생성한다.

Sender 클래스 import java.net.*; import java.io.*; public class Sender { public static void main(string[] args) throws IOException { DatagramSocket socket = null; socket = new DatagramSocket(); String s = " 우리는여전히우리운명의주인이다."; byte[] buf = s.getbytes(); 트 // "address" 의 port" 에있는클라이언트에게데이터를보낸다. InetAddress address = InetAddress.getByName("127.0.0.1"); // 로컬호스 DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 5000); socket.send(packet); socket.close(); import java.io.*; import java.net.*; Receiver 클래스 public class Receiver { public static void main(string[] args) throws IOException { byte[] buf = new byte[256]; DatagramSocket socket = new DatagramSocket(5000); // 포트번호 : 5000 DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); System.out.println(new String(buf));

서버와클라이언트의실행 두개의프로그램을동시에실행하여야한다. Q & A