[ 단원 11 ] 입출력과 네트워크.

Slides:



Advertisements
Similar presentations
Computer Network Lab UDP 데이터그램 과 소켓 강 동 호 컴퓨터 네트워크 실험실.
Advertisements

Computer Network Lab 다중전송 소켓 컴퓨터 네트워크 실험실 이 희 규, 조 한 진.
Chap15 네트워킹 Section 1 : 네트워킹의 개요와 java.net 패키지 Section 2 : 인터넷 주소와 URL Section 3 : TCP 소켓 Section 4 : UDP 소켓.
Chap15 네트워킹 Section 1 : 네트워킹의 개요와 java.net 패키지 Section 2 : 인터넷 주소와 URL
컴퓨터와 인터넷.
1 안드로이드 네트워킹 안드로이드 앱 프로그래밍 여 규리.
네트워킹 프로그래밍과 java.net 패키지
자바네트워크 제2주 바이트 입출력 스트림, 필터 입출력 스트림 컴퓨터시뮬레이션학과 2014년 봄학기 담당교수 : 이형원
네트워크 프로그래밍 및 실습.
자바 5.0 프로그래밍.
10. 예외 처리.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Ch.07-5 xml-rpc 사용하기 김상엽.
Network Lab. Young-Chul Hwang
10장 예외 Lab 10-1.
PHP입문 Izayoi 김조흔.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
Chap11 네트워킹 11.1 네트워킹의 개요와 java.net 패키지 11.2 인터넷 주소와 URL 11.3 TCP 소켓
파일 입출력에 사용되는 자바 클래스들 JDK 라이브러리의 파일을 다루는 클래스들 파일의 내용을 읽고 쓰는 클래스들
Lesson 3. 입출력과 제어문.
INDEX 1. 전체 시스템 구성도 2. 개발환경 3. 사용자 명령어 4. 패킷 구조 및 데이터 구조
제 14장 Multicast & Broadcast
JAVA 프로그래밍 12장 네트워킹(Networking).
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
18장. IO기반 입출력 및 네트워킹.
31강 JAVA 네트워크 JAVA 네트워크 InetAdress, URLConnection 클래스 Socket의 이해
17장 네트워크 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
네트워킹 CHAPTER 13 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
명품 JAVA Programming 제 16 장 네트워크.
명품 JAVA Programming 제 16 장 네트워크.
자바네트워크 제9주 TCP/IP 클라이언트 소켓 컴퓨터시뮬레이션학과 2014년 봄학기 담당교수 : 이형원
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
네트워크 프로그래밍 Yang-Sae Moon Department of Computer Science
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Chapter 06. UDP 서버/클라이언트.
01. DHCP의 개념 조직의 네트워크에 연결되어 있는 워크스테이션의 TCP/IP 설정을 자동화하기 위한 표준 프로토콜
Java의 정석 제 15 장 네트워킹(Networking) Java 정석 남궁성 강의
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
명품 JAVA Essential.
TCP/IP Socket Programming…
Socket Address Structure and Byte Ordering Functions
Network Programming(1)
Socket Address Structure and Byte Ordering Functions
10장. 예외처리.
15장 네트워킹 15.1 네트워킹의 개요와 java.net 패키지 15.2 인터넷 주소와 URL 15.3 TCP 소켓
Chapter 5 UDP Socket 소켓 프로그래밍.
I/O&socket통신 POWERPOINT & GROUP STUDY 한재희 김상훈 최기람 황인준 이어진.
Lesson 4. 수식과 연산자.
22 장 전송층(Transport Layer)
RMI Messenger 지도 : 김정배 교수님 조봉진.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 암호 프로그래밍 Java Cryptography Programming
Network 네트워크 이론 및 실습 TCP / IP 4장.
자바 5.0 프로그래밍.
자바로 만든 채팅 프로그램 임경진 조주경 지도교수님 : 이광세 교수님.
CHAP 21. 전화, SMS, 주소록.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
[ 단원 04 ] 반복과 배열.
01. DHCP의 개념 조직의 네트워크에 연결되어 있는 워크스테이션의 TCP/IP 설정을 자동화하기 위한 표준 프로토콜
Chapter 04. TCP 서버/클라이언트.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
JSP Programming with a Workbook
MIDP 네트워크 프로그래밍 ps lab 김윤경.
다자간 채팅프로그램 김형도 허영민
JSP Programming with a Workbook
Network Lab. Young-Chul Hwang
Completion Port기반의 채팅프로그램
ARP.
중간 결과 보고 ( Server & Client )
Presentation transcript:

[ 단원 11 ] 입출력과 네트워크

학습목표(1) 입력과 출력의 개념을 이해하고 바이트 기반의 다양한 입출력을 활용할 수 있다. • 입력과 출력, 스트림의 이해 • InputStream과 OutputStream의 이해 • FileInputStream과 FileOutputStream의 이해 • BufferedInputStream과 BufferdOutputStream의 이해 문자 기반의 다양한 입출력을 활용할 수 있다. • 바이트 기반의 입출력과 차이점을 이해 • Reader와 Writer의 이해 • FileReader와 FileWriter의 이해 • 파일을 읽어 새로운 파일을 생성하는 방법의 이해 • 버퍼링을 사용하여 효율적인 파일 처리 • 파일과 폴더의 정보를 처리하는 클래스 File

학습목표(2) 네트워크와 URL를 이해하고 프로그래밍에 활용할 수 있다. • IP 주소의 이해 및 정보 처리 • 웹 페이지를 접근하여 내용 출력 방법의 이해 자료 통신을 위한 소켓 프로그래밍을 이해하고 프로그래밍에 활용할 수 있다. • TCP와 UDP의 차이를 이해 • 통신을 위한 TCP 소켓 프로그래밍의 이해 • 통신을 위한 UDP 소켓 프로그래밍의 이해

1. 입력과 출력

입출력 개념 자료의 이동 스트림 입출력 입출력에 필요한 정보 흐름의 통로 역할 Section 1 입력과 출력 p486 입출력 개념 자료의 이동 입출력 컴퓨터와 장치 그리고 프로그램 사이에서 자료를 주고받는 일을 총칭 스트림 입출력에 필요한 정보 흐름의 통로 역할 정보의 입력을 위해서는 입력 장소와 입력 스트림이 필요 마찬가지로 출력을 위해서는 출력 장소와 출력 스트림이 필요

바이트 단위와 문자 단위의 스트림 바이트 중심 문자 중심 보조 스트림 Section 1 입력과 출력 바이트 단위와 문자 단위의 스트림 바이트 중심 추상 클래스인 InputStream과 OutputStream을 최상위 클래스 이름이 ~InputStream과 ~OutputStream 문자 중심 추상 클래스인 Reader와 Writer를 최상위 클래스 이름이 ~Reader와 ~Writer 보조 스트림 실제 스트림의 입출력의 편리를 위하여 사용

클래스 InputStream과 OutputStream Section 1 입력과 출력 클래스 InputStream과 OutputStream 바이트 중심의 입출력을 담당하는 클래스 InputStream OutputStream

Section 1 입력과 출력 입출력 클래스 계층구조 클래스인 InputStream과 OutputStream의 하위 클래스

클래스 ByteArrayInputStream과 ByteArrayOutputStream Section 1 입력과 출력 클래스 ByteArrayInputStream과 ByteArrayOutputStream 바이트 배열 형태의 입출력 위한 클래스 ByteArrayInputStream 메소드 ByteArrayOutputStream 메소드

실습예제 11-1 바이트 배열 형태의 입출력 예제 Section 1 입력과 출력 package basicio; bOutput.write(Character.toUpperCase((char)c));   import java.io.*; } import java.util.Arrays; System.out.println(); //객체 ByteArrayOutputStream을 출력하면 출력된 자료가 그대로 출력 public class ByteArrayIO { public static void main(String args[]) throws IOException { System.out.println(bOutput); int c; //배열 Arrays 메소드 toString() 사용하여 각각 입력 값과 출력 값을 출력 byte b [] = {'a', 'b', 'c', 'd'}; System.out.println(Arrays.toString(b)); //배열 b를 읽는 ByteArrayInputStream 객체를 생성 System.out.println(Arrays.toString(bOutput.toByteArray())); ByteArrayInputStream bInput = new ByteArrayInputStream(b); //배열 b를 소문자를 대문자로 출력하는 ByteArrayOutputStream 객체를 생성 ByteArrayOutputStream bOutput = new ByteArrayOutputStream(); System.out.println("문자를 읽어 대문자로 출력"); while ((c = bInput.read()) != -1) { System.out.print((char)c); //객체 ByteArrayOutputStream에 대문자를 출력

클래스 FileInputStream 파일로부터 내용을 바이트 기반으로 입력하기 위한 스트림 생성자 Section 1 입력과 출력 클래스 FileInputStream 파일로부터 내용을 바이트 기반으로 입력하기 위한 스트림 생성자 인자 유형이 각각 String, File, FileDescriptor 인자의 유형이 String과 File인 경우 지정된 인자의 파일이 존재하지 않는 경우에는 FileNotFoundException을 발생 처리를 위한 try~catch 문을 이용

실습예제 11-2 소스 파일 출력 Section 1 입력과 출력 package basicio; import java.io.*;   import java.io.*; public class ReadFiles { public static void main(String[] args) { int data; //읽을 파일 이름 지정 String fname = "src/basicio/ReadFiles.java"; try { //읽을 파일 이름으로 FileInputStream 생성 FileInputStream fis = new FileInputStream(fname); //한 바이트씩 읽어 문자로 변환하여 출력 while ((data = fis.read()) != -1) { char c = (char) data; System.out.print(c); } } catch (FileNotFoundException e) { System.err.println("다음 파일이 없습니다. : " + fname); } catch (IOException e) { System.err.println(e); System.out.println();

클래스 FileOutputStream 파일로 출력하기 위한 스트림을 제공 생성자로는 네 가지가 제공 주요 메소드 Section 1 입력과 출력 클래스 FileOutputStream 파일로 출력하기 위한 스트림을 제공 생성자로는 네 가지가 제공 인자 유형이 각각 String, File, FileDescriptor 마지막 생성자는 두 개의 인자가 필요 인자의 유형이 String과 File인 경우 지정된 인자의 파일을 출력하기 위한 스트림의 생성에 문제가 발생하면 IOException을 발생 예외처리를 위한 try~catch 문을 이용 주요 메소드

Section 1 입력과 출력 실습예제 11-3 파일 내용을 읽어 다른 파일에 출력

기본 스트림을 활용하는 필터스트림 클래스 BufferedInputStream과 BufferedOutputStream 버퍼링 Section 1 입력과 출력 기본 스트림을 활용하는 필터스트림 클래스 BufferedInputStream과 BufferedOutputStream 추상 클래스 FilterInputStream과 FilterOutputStream의 하위 클래스 버퍼링을 사용하여 입출력의 성능을 향상시키는 스트림 버퍼링 자료 처리 속도가 다른 두 장치 간에 일정 크기의 임시 저장 장치를 이용하여 정보 처리를 보다 빠르게 하는 방법 파일에 BufferedOutputStream을 이용하여 바이트 배열의 출력을 수행하는 소스 파일에서 바이트 배열에 입력을 수행하는 소스

Section 1 입력과 출력 실습예제 11-4 버퍼링을 사용하여 파일에 출력 및 입력

2. 문자 중심의 입출력과 파일 정보

문자 중심의 입출력 클래스 클래스 Reader와 Writer 문자 중심의 입출력을 담당하는 추상 클래스 Section 2 문자중심의 입출력과 파일정보 p498 문자 중심의 입출력 클래스 클래스 Reader와 Writer 문자 중심의 입출력을 담당하는 추상 클래스 클래스 Reader의 주요 메소드 클래스 Writer의 주요 메소드

입출력 클래스 계층구조 추상 클래스인 Reader와 Writer의 하위 클래스 문자 중심의 입출력을 담당하는 클래스의 계층구조 Section 2 문자중심의 입출력과 파일정보 입출력 클래스 계층구조 추상 클래스인 Reader와 Writer의 하위 클래스 문자 중심의 입출력을 담당하는 클래스의 계층구조

Section 2 문자중심의 입출력과 파일정보 실습예제 11-5 소스 파일 ‘MyFileReaderWriter.java’를 읽어 콘솔에 표준 출력하고 소스 파일 ‘MyFileReaderWriter.back’에 출력

Section 2 문자중심의 입출력과 파일정보 실습예제 11-6 바이트 기반으로 파일을 열어 문자 기반의 파일 스트림으로 연결하여 다시 문자 기반의 버퍼링을 이용하여 콘솔에 출력

클래스 File 파일과 폴더에 대한 여러 연산을 수행하기 위한 클래스 생성자 주요 메소드 Section 2 문자중심의 입출력과 파일정보 클래스 File 파일과 폴더에 대한 여러 연산을 수행하기 위한 클래스 생성자 주요 메소드

Section 2 문자중심의 입출력과 파일정보 실습예제 11-8 File의 메소드 createNewFile()에 의해 내용이 전혀 없는 새로운 파일을 만들어 FileWriter로 원하는 문자열을 파일에 저장

3. 네트워크와 인터넷

네트워크와 IP 정보 클래스 InetAddress IP 주소를 처리하기 위한 클래스 정적 메소드 getByName()을 사용 Section 3 네트워크와 인터넷 p508 네트워크와 IP 정보 클래스 InetAddress IP 주소를 처리하기 위한 클래스 컴퓨터마다 고유한 주소인 IP 주소 정적 메소드 getByName()을 사용 도메인 이름으로 InetAddress를 반환 UnknownHostException 예외를 발생할 수 있으므로 try 문을 사용 반환된 InetAddress를 출력하면 ‘도메인이름/ip주소’가 출력 주요 메소드

Section 3 네트워크와 인터넷 실습예제 11-9 네크워크 ip 주소에 대한 정보 출력

웹 페이지 정보 처리 클래스 URL과 URLConnection 웹 페이지 표준 출력 클래스 java.net.URL Section 3 네트워크와 인터넷 웹 페이지 정보 처리 클래스 URL과 URLConnection 클래스 java.net.URL 웹의 리소스인 URL(Uniform Resource Locator)을 표현하는 클래스 클래스 java.net.URLConnection 응용프로그램과 URL 간의 통신연결을 나타내는 클래스의 최상위 추상 클래스 웹 페이지 표준 출력 URL 객체의 openStream()으로 입력 스트림을 열어 처리

Section 3 네트워크와 인터넷 실습예제 11-10 웹 페이지를 접속하여 문서를 표준출력으로 출력

4. 소켓 프로그래밍

소켓 자료 전송 TCP와 UDP 소켓(socket) 스트림(stream) TCP UDP Section 4 소켓 프로그래밍 p512 소켓 자료 전송 소켓(socket) 호스트(host) 간의 자료 전송을 위한 호스트의 끝단(endpoint) 필요 스트림(stream) 통신의 끝단인 소켓에 연결된 전송 통로 TCP와 UDP TCP 연결(connection) 기반 방식 전송할 자료의 특별한 형식이 없는 신뢰성 있는 자료 전송에 적합한 방식 UDP 자료 전송의 신뢰성이 떨어지며 대량의 정보 전송에 적합한 방식

Section 4 소켓 프로그래밍 TCP와 UDP의 비교 차이

서버 소켓과 소켓 서버와 클라이언트가 서로 자료를 교환하기 위한 통신 서버 소켓 (ServerSocket) Section 4 소켓 프로그래밍 서버 소켓과 소켓 서버와 클라이언트가 서로 자료를 교환하기 위한 통신 서버 소켓 (ServerSocket) 클라이언트의 연결 요청을 기다리다가 요청이 들어오면 통신을 위하여 소켓을 생성 서버와 클라이언트의 각자의 소켓(Socket) 서버와 클라이언트의 실제 통신을 담당 서버와 클라이언트가 통신하기 위한 절차 ➊ [서버]: 포트번호를 이용해서 ServerSocket을 열어 클라이언트의 요청을 기다림 ➋ [클라이언트]: 서버의 주소와 포트번호를 이용해서 Socket을 열어 서버와 연결 ➌ [서버]: 클라이언트의 요청을 받아 들여 서버의 Socket을 생성 ➍ [서버와 클라이언트]: 서버와 클라이언트에서 연결된 Socket에서 자료를 교환할 수 있도록 입력스트림과 출력스트림을 생성하여 서로 통신

클래스 ServerSocket, Socket Section 4 소켓 프로그래밍 클래스 ServerSocket, Socket 클래스 java.net.ServerSocket 서버 소켓을 구현 메소드 accept()는 클라이언트의 요청에 통신을 위한 Socket을 반환 클래스 java.net.Socket 소켓을 구현, 두 시스템의 통신을 위한 지점 메소드 getInputStream()과 getOutputStream() 입력과 출력 스트림을 생성

실습예제 11-13: 정보가 출력되는 서버 소켓 프로그래밍 Section 4 소켓 프로그래밍 실습예제 11-13: 정보가 출력되는 서버 소켓 프로그래밍 package socket;   import java.io.*; public void send(String msg) { import java.net.*; // 클라이언트 소켓에 메시지 전송 out.println(msg); public class MyServerSocket { out.flush(); int port = 7070; System.out.println("[서버] " + msg); ServerSocket server; Socket socket; BufferedReader in; public void close() { PrintWriter out; // 클라이언트 소켓 종료 public MyServerSocket (int port) { socket.close(); this.port = port; } catch(IOException e) { System.out.println(">> 서버를 시작합니다."); try { server = new ServerSocket(7070); } catch (IOException e) { System.out.println(e.toString()); public void printInfo() { } System.out.println(">> 클라이언트가 접속에 성공했습니다."); //서비스 포트 번호와 클라이언트 주소와 포트번호 출력 System.out.println(" 서버 포트번호: " + socket.getLocalPort()); public void waitForClient() { System.out.println(" 클라이언트 주소: " + socket.getInetAddress()); System.out.println(">> 클라이언트가 접속하길 기다리고 있습니다."); System.out.println(" 클라이언트 포트번호: " + socket.getPort() + '\n'); // 클라이언트 접속때까지 대기 socket = server.accept(); printInfo(); //클라이언트 소켓에 스트림을 연결 public static void main(String[] args) { in = new BufferedReader(new InputStreamReader(socket.getInputStream())); MyServerSocket myServer = new MyServerSocket(port); out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); myServer.waitForClient(); myServer.receive(); myServer.send("서버에 접속하신 것을 환영합니다!"); myServer.close(); public void receive() { //클라이언트 소켓으로부터 받은 메시지를 화면에 출력 System.out.println("[클라이언트] "+ in.readLine()); >> 서버를 시작합니다. >> 클라이언트가 접속하길 기다리고 있습니다. >> 클라이언트가 접속에 성공했습니다. 서버 포트번호: 7070 클라이언트 주소: /127.0.0.1 클라이언트 포트번호: 49592 [클라이언트] 안녕하세요? 클라이언트입니다. [서버] 서버에 접속하신 것을 환영합니다!

실습예제 11-14: 표준입력을 서버에 전송하는 클라이언트 소켓 프로그래밍 Section 4 소켓 프로그래밍 실습예제 11-14: 표준입력을 서버에 전송하는 클라이언트 소켓 프로그래밍 package socket; out.flush();   System.out.println("[클라이언트] " + msg); import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public void close() { import java.io.OutputStreamWriter; import java.io.PrintWriter; // 클라이언트 소켓 종료 import java.net.Socket; socket.close(); import java.util.Scanner; } catch(IOException e) { public class MyClientSocket { Socket socket; BufferedReader in; PrintWriter out; public void printInfo() { System.out.println(">> 서버 접속에 성공했습니다."); public MyClientSocket (String ip, int port) { //서비스 포트 번호와 클라이언트 주소와 포트번호 출력 try { System.out.println(" 서버 주소: " + socket.getInetAddress()); socket = new Socket(ip, port); System.out.println(" 서버 포트번호: " + socket.getPort()); System.out.println(" 클라이인트 포트번호: " + socket.getLocalPort() + '\n'); //서버 소켓에 스트림을 연결 in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); public static void main(String[] args) { //서버 주소와 포트번호를 지정하여 서버에 접속 printInfo(); MyClientSocket client = new MyClientSocket("127.0.0.1", 7070); } catch (IOException e) { System.out.println(e.toString()); System.out.print("서버에게 보낼 메시지 입력 >> "); } Scanner s = new Scanner(System.in); String msg = s.nextLine(); client.send(msg); public void receive() { client.receive(); client.close(); //서버 소켓으로부터 받은 메시지를 화면에 출력 System.out.println("[서버] "+ in.readLine()); public void send(String msg) { //서버 소켓에 메시지 전송 out.println(msg); >> 서버 접속에 성공했습니다. 서버 주소: /127.0.0.1 서버 포트번호: 7070 클라이인트 포트번호: 49592 서버에게 보낼 메시지 입력 >> 안녕하세요? 클라이언트입니다. [클라이언트] 안녕하세요? 클라이언트입니다. [서버] 서버에 접속하신 것을 환영합니다!

소켓을 이용한 채팅 프로그래밍 1:1로 채팅을 수행 서버나 클라이언트 모두 Section 4 소켓 프로그래밍 소켓을 이용한 채팅 프로그래밍 1:1로 채팅을 수행 서버나 클라이언트 모두 어느 때나 메시지를 입력한 후 [Enter] 키를 누르면 상대에게 전송되며 전송된 메시지는 표준출력에 출력 Receiver: 수신자 Sender: 송신자

메시지 송수신을 위한 스레드 처리 MsgSender와 MsgReceiver 메시지의 송수신을 처리하는 클래스 Section 4 소켓 프로그래밍 메시지 송수신을 위한 스레드 처리 MsgSender와 MsgReceiver 메시지의 송수신을 처리하는 클래스 Thread를 상속받아 run() 메소드를 구현

Section 4 소켓 프로그래밍 송신을 위한 클래스 MsgSender

Section 4 소켓 프로그래밍 수신을 위한 클래스 MsgReceiver

채팅 서버인 클래스 ChatServer Section 4 소켓 프로그래밍 package chat;   public void close() { import java.io.*; import java.net.*; // 클라이언트 소켓 종료 socket.close(); public class ChatServer { } catch(IOException e) { int port = 7070; ServerSocket server; Socket socket; public ChatServer (int port) { public void printInfo() { this.port = port; System.out.println(">> 클라이언트가 접속에 성공했습니다."); System.out.println(">> 서버를 시작합니다."); //서비스 포트 번호와 클라이언트 주소와 포트번호 출력 try { System.out.println(" 서버 포트번호: " + socket.getLocalPort()); server = new ServerSocket(port); } catch (IOException e) { System.out.println(" 클라이언트 주소: " + socket.getInetAddress()); e.printStackTrace(); } System.out.println(" 클라이언트 포트번호: " + socket.getPort() + '\n'); System.out.println(">> 클라이언트에 전달할 메시지를 쓰고 Enter를 누르세요." + '\n'); public void communicate() { System.out.println(">> 클라이언트가 접속하길 기다리고 있습니다."); public static void main(String[] args) { // 클라이언트 접속 때까지 대기 socket = server.accept(); ChatServer myServer = new ChatServer(port); printInfo(); myServer.communicate(); //서버 소켓에 입력과 출력을 위한 sender와 receiver를 연결 MsgSender sender = new MsgSender("서버", socket); MsgReceiver receiver = new MsgReceiver("서버", socket); //sender와 receiver의 스레드를 실행 receiver.start(); sender.start();

채팅 클라이언트인 클래스 ChatClient Section 4 소켓 프로그래밍 채팅 클라이언트인 클래스 ChatClient package chat;   import java.io.BufferedReader; public void printInfo() { import java.io.IOException; System.out.println(">> 서버 접속에 성공했습니다."); import java.io.PrintWriter; //서비스 포트 번호와 클라이언트 주소와 포트번호 출력 import java.net.Socket; System.out.println(" 클라이언트 포트번호: " + socket.getLocalPort()); public class ChatClient { System.out.println(" 서버 주소: " + socket.getInetAddress()); Socket socket; BufferedReader in; System.out.println(" 서버 포트번호: " + socket.getPort() + '\n'); PrintWriter out; System.out.println(">> 서버에 전달할 메시지를 쓰고 Enter를 누르세요." + '\n'); public ChatClient(String ip, int port) { try { socket = new Socket(ip, port); printInfo(); public static void main(String[] args) { } catch (IOException e) { //서버 주소와 포트번호를 지정하여 서버에 접속 e.printStackTrace(); ChatClient client = new ChatClient("127.0.0.1", 7070); } //서버와 통신 client.communicate(); public void communicate() { //클라이언트 소켓에 입력과 출력을 위한 sender와 receiver를 연결 MsgSender sender = new MsgSender("클라이언트", socket); MsgReceiver receiver = new MsgReceiver("클라이언트", socket); //sender와 receiver의 스레드를 실행 sender.start(); receiver.start(); public void close() { // 클라이언트 소켓 종료 socket.close(); } catch(IOException e) { System.out.println(e.toString());

UDP 통신 UDP: User Datagram Protocol UDP의 특징 Section 4 소켓 프로그래밍 UDP는 TCP와는 다르게 비연결성connectionless이며, 속도는 빠르지만 TCP보다 신뢰성이 떨어지는 통신 프로토콜 UDP의 특징 ① 송수신할 정보는 DatagramPacket에 저장하며, 이 패킷을 보낼 때마다 수신 측의 주소와 포트번호를 함께 전송해야 한다. ② DatagramSocket의 메소드 send()와 receive()로 송수신할 DatagramPacket을 전달하고 받는다. ③ UDP는 데이터를 전송할 때만 연결되는 비연결성인 특징

클래스 DatagramSocket과 DatagramPacket Section 4 소켓 프로그래밍 클래스 DatagramSocket과 DatagramPacket UDP로 데이터그램패킷(DatagramPacket)인 정보를 송수신 객체 DatagramSocket을 생성 서비스할 포트번호를 지정하거나 또는 기본 생성자로 생성 DatagramSocket에 자료를 전송하려면 먼저 DatagramPacket을 생성

UDP 통신을 위한 서버 구현 Section 4 소켓 프로그래밍 package udp; //전송받은 결과를 문자열로 변환,   //String(byte[] bytes, int offset, int length) import java.net.DatagramPacket; String strIn = new String(rPack.getData(), 0, rPack.getData().length); import java.net.DatagramSocket; import java.net.InetAddress; //클라이언트의 주소와 포트번호를 반환 import java.io.BufferedReader; client = rPack.getAddress(); import java.io.InputStreamReader; cport = rPack.getPort(); //전송받은 결과를 출력하고 quit이면 종료 public class BasicUDPServer { System.out.println("[클라이언트" + client + ": " + cport + "]" + strIn); DatagramSocket dsock; DatagramPacket sPack, rPack; if (strIn.trim().equals("quit")) break; InetAddress client; int sport = 7777, cport; //표준입력으로 입력된 정보를 DatagramPacket으로 만들어 클라이언트에 전송 public BasicUDPServer(int sport) { String strOut = br.readLine(); try { sPack = new DatagramPacket(strOut.getBytes(), strOut.getBytes().length, client, cport); // DatagramPacket을 sport로 지정하여 생성 this.sport = sport; dsock.send(sPack); System.out.println(">> 서버를 시작합니다."); System.out.println(">> 클라이언트가 접속하길 기다리고 있습니다." + "\n"); System.out.println("UDP 서버를 종료합니다."); } catch(Exception e){ this.dsock = new DatagramSocket(sport); } catch (Exception e) { System.out.println(e); } public static void main(String[] args) { BasicUDPServer client = new BasicUDPServer(7777); public void communicate() { client.communicate(); //키보드로부터 전송할 문자열을 입력받기 위해 BufferedReader 형태로 변환 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true) { byte[] buffer = new byte[1024]; //클라이언트에서 전송되는 DatagramPacket을 받기 위해 rPack 생성한 후 대기 rPack = new DatagramPacket(buffer, buffer.length); dsock.receive(rPack);

UDP 통신을 위한 클라이언트 구현 Section 4 소켓 프로그래밍 package udp; //DatagramPacket에 입력 줄을 저장하고 서버에 전송   sPack = new DatagramPacket(strOut.getBytes(), import java.net.DatagramPacket; strOut.getBytes().length, server, port); import java.net.DatagramSocket; dsock.send(sPack); import java.net.InetAddress; //서버에 quit를 전송하면 종료 import java.io.BufferedReader; if (strOut.equals("quit")) break; import java.io.InputStreamReader; //서버로부터 수신되는 DatagramPacket을 받아 표준출력 public class BasicUDPClient { DatagramSocket dsock; byte[] buffer = new byte[1024]; DatagramPacket sPack, rPack; rPack = new DatagramPacket(buffer, buffer.length); InetAddress server; dsock.receive(rPack); int port = 8888; String strIn = new String(rPack.getData(), 0, rPack.getData().length); public BasicUDPClient(String ip, int port) { System.out.println("[서버" + server + ": " + port + "]" + strIn); try { // DatagramPacket에 들어갈 ip 주소가 InetAddress 형태여야 함 System.out.println("UDP 클라이언트를 종료합니다."); server = InetAddress.getByName(ip); } catch(Exception e){ this.port = port; this.dsock = new DatagramSocket(); System.out.println(">> 서버에 접속합니다."); System.out.println(">> 서버에 전달할 메시지를 쓰고 Enter를 누르세요."); public static void main(String[] args) { System.out.println(">> 종료하려면 quit를 쓰고 Enter를 누르세요." + "\n"); BasicUDPClient client = new BasicUDPClient("127.0.0.1", 7777); } catch (Exception e) { client.communicate(); System.out.println(e); } public void communicate() { // 키보드로부터 서버에게 전송할 문자열을 입력받기 위해 BufferedReader 형태로 변환 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String strOut = null; while ((strOut = br.readLine()) != null) {

[ Add your company slogan ] Thank You !