18장. IO기반 입출력 및 네트워킹.

Slides:



Advertisements
Similar presentations
Chap15 네트워킹 Section 1 : 네트워킹의 개요와 java.net 패키지 Section 2 : 인터넷 주소와 URL Section 3 : TCP 소켓 Section 4 : UDP 소켓.
Advertisements

컴퓨터와 인터넷.
1 안드로이드 네트워킹 안드로이드 앱 프로그래밍 여 규리.
자바네트워크 제2주 바이트 입출력 스트림, 필터 입출력 스트림 컴퓨터시뮬레이션학과 2014년 봄학기 담당교수 : 이형원
네트워크 프로그래밍 및 실습.
자바 5.0 프로그래밍.
Java의 정석 제 14 장 입출력(I/O) Java 정석 남궁성 강의
CHAP 22. 블루투스.
김태원 심재일 김상래 강신택. 김태원 심재일 김상래 강신택 인터넷 통신망의 정보를 제공하는 서비스 인터넷의 자원 및 정보는 NIC가 관리 IP주소 또는 도메인으로 정보 검색 이용자 및 통신망 관한 정보를 제공.
Power Java 제3장 이클립스 사용하기.
Power Java 제3장 이클립스 사용하기.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
Ch.07-5 xml-rpc 사용하기 김상엽.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
Network Lab. Young-Chul Hwang
Windows Server 장. Windows Server 2008 개요.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
PHP입문 Izayoi 김조흔.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
24 장 TCP/IP 24.1 개요 24.2 네트워크층 24.3 주소 지정 24.4 서브넷팅틍
파일 입출력에 사용되는 자바 클래스들 JDK 라이브러리의 파일을 다루는 클래스들 파일의 내용을 읽고 쓰는 클래스들
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
네트워킹 CHAPTER 13 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Chapter 06. UDP 서버/클라이언트.
NJM Messenger 박상원 박연호.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
모바일 자바 프로그래밍 JDBC / WAP Ps lab 오민경.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
뇌를 자극하는 Windows Server 장. Windows Server 2008 개요.
TCP/IP Socket Programming…
10장. 예외처리.
제 01 장 인터넷 프로그래밍 개요 학기 인터넷비즈니스과 강 환수 교수.
15장 네트워킹 15.1 네트워킹의 개요와 java.net 패키지 15.2 인터넷 주소와 URL 15.3 TCP 소켓
Chapter 5 UDP Socket 소켓 프로그래밍.
CHAP 12. 리소스와 보안.
I/O&socket통신 POWERPOINT & GROUP STUDY 한재희 김상훈 최기람 황인준 이어진.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
RMI Messenger 지도 : 김정배 교수님 조봉진.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 암호 프로그래밍 Java Cryptography Programming
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
자바로 만든 채팅 프로그램 임경진 조주경 지도교수님 : 이광세 교수님.
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
CHAP 21. 전화, SMS, 주소록.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
웹(WWW).
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
Chapter 04. TCP 서버/클라이언트.
JSP Programming with a Workbook
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
5.2.3 교환방식의 비교 학습내용 교환방식의 비교.
MIDP 네트워크 프로그래밍 ps lab 김윤경.
9 브라우저 객체 모델.
다자간 채팅프로그램 김형도 허영민
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
채팅 및 파일전송 프로그램 권 경 곤 김 창 년.
JSP Programming with a Workbook
Completion Port기반의 채팅프로그램
7 생성자 함수.
6 객체.
JAVA 프로그래밍 16장 JNLP.
ARP.
20 XMLHttpRequest.
Presentation transcript:

18장. IO기반 입출력 및 네트워킹

1절. IO 패키지 소개 2절. 입력 스트림과 출력 스트림 3절. 콘솔(Console) 입출력 4절. 파일(File) 입출력 5절. 보조 스트림 6절. 네트워크 기초 7절. TCP 네트워킹 8절. UDP 네트워킹

1절. IO 패키지 소개 java.io 패키지 자바의 기본적인 데이터 입출력(IO: Input/Output) API 제공

2절. 입력 스트림과 출력 스트림 입력 스트림과 출력 스트림의 개념

2절. 입력 스트림과 출력 스트림 바이트 기반 스트림과 문자 기반 스트림 바이트 기반 스트림 문자 기반 스트림 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 받고 보내는 것 가능 문자 기반 스트림 문자만 받고 보낼 수 있도록 특화

2절. 입력 스트림과 출력 스트림 InputStream 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스 InputStream 클래스의 주요 메소드 (p.997~999)

2절. 입력 스트림과 출력 스트림 OutputStream 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스 OutputStream의 주요 메소드 (p.1000~1002)

2절. 입력 스트림과 출력 스트림 Reader 문자 기반 입력 스트림의 최상위 클래스로 추상 클래스 Reader의 주요 메소드 (p.1002~1005)

2절. 입력 스트림과 출력 스트림 Writer 문자 기반 출력 스트림의 최상위 클래스로 추상 클래스 Writer의 주요 메소드 (p.1006~1009)

3절. 콘솔 입출력 콘솔(Console) 시스템을 사용하기 위해 키보드로 입력을 받고 화면으로 출력하는 소프트웨어 시스템을 사용하기 위해 키보드로 입력을 받고 화면으로 출력하는 소프트웨어 Unix, Linux: 터미널 Windows 운영체제: 명령 프롬프트 이클립스: Console 뷰

3절. 콘솔 입출력 System.in 필드 InputStream 타입의 입력 스트림 - InputStream 변수 대입 가능 읽은 byte는 키보드의 아스키 코드(ascii code) 아스키 코드로부터 문자 변환 키보드로부터 입력된 한글 읽기 예제 read()메소드는 1바이트씩만 읽음  오류 발생 전체 내용을 바이트 배열로 받아 String 객체 생성 후 읽기

3절. 콘솔 입출력 Console 클래스 System.out 필드 PrintStream 타입의 출력 스트림 OutputStream으로 타입 변환 가능 아스키 코드를 출력하면 콘솔에는 문자가 출력 문자열을 출력하려면 바이트 배열을 얻어야 Console 클래스 자바6부터 콘솔에서 입력된 문자열을 쉽게 읽을 수 있도록 제공 이클립스에서 System.console()은 null 리턴 명령 프롬프트에서 반드시 실행 Console 클래스의 읽기 메소드

3절. 콘솔 입출력 Scanner 클래스 Console 클래스의 단점 java.util.Scanner 문자열은 읽을 수 있지만 기본 타입(정수, 실수) 값을 바로 읽을 수 없음 java.util.Scanner 콘솔로부터 기본 타입의 값을 바로 읽을 수 있음 제공하는 메소드

4절. 파일 입출력 File 클래스 파일 시스템의 파일을 표현하는 클래스 파일 객체 생성 파일 크기, 파일 속성, 파일 이름 등의 정보 제공 파일 생성 및 삭제 기능 제공 디렉토리 생성, 디렉토리에 존재하는 파일 리스트 얻어내는 기능 제공 파일 객체 생성 파일 또는 디렉토리 존재 유무 확인 메소드 파일 및 디렉토리 생성 및 삭제 메소드

4절. 파일 입출력 파일 및 디렉토리의 정보를 리턴하는 메소드

4절. 파일 입출력 FileInputStream 파일로부터 바이트 단위로 읽어 들일 때 사용 객체 생성 방법 그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 파일을 읽을 수 있음 객체 생성 방법 FileInputStream 객체가 생성될 때 파일과 직접 연결 만약 파일이 존재하지 않으면 FileNotFoundException 발생 try-catch문으로 예외 처리 InputStream 하위 클래스 - 사용 방법이 InputStream과 동일

4절. 파일 입출력 FileOutputStream 파일에 바이트 단위로 데이터를 저장할 때 사용 객체 생성 방법 그림, 오디오, 비디오, 텍스트 등 모든 종류의 데이터를 파일로 저장 객체 생성 방법 파일이 이미 존재할 경우, 데이터를 출력하게 되면 파일을 덮어쓰는 단점 기존 파일 내용 끝에 데이터를 추가할 경우 OutputStream 하위 클래스 - 사용 방법이 OutputStream과 동일

4절. 파일 입출력 FileReader 텍스트 파일로부터 데이터를 읽어 들일 때 사용 객체 생성 방법 문자 단위로 읽음 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 읽을 수 없음 객체 생성 방법 FileReader 객체가 생성될 때 파일과 직접 연결 만약 파일이 존재하지 않으면 FileNotFoundException 발생 try-catch문으로 예외 처리 Reader 하위 클래스 - 사용 방법 Reader와 동일

4절. 파일 입출력 FileWriter 텍스트 파일에 문자 데이터를 저장할 때 사용 객체 생성 방법 파일 존재여부 따라 분기 텍스트가 아닌 그림, 오디오, 비디오 등의 데이터를 파일로 저장 불가 객체 생성 방법 파일이 이미 존재할 경우, 데이터를 출력하게 되면 파일을 덮어쓰게 됨. 파일 존재여부 따라 분기 기존 파일 내용 끝에 데이터를 추가할 경우 Writer 하위 클래스 - 사용 방법이 Writer와 동일

5절. 보조 스트림 보조 스트림 다른 스트림과 연결 되어 여러 가지 편리한 기능을 제공해주는 스트림 보조 스트림 생성 문자 변환, 입출력 성능 향상, 기본 데이터 타입 입출력, 객체 입출력 등의 기능을 제공 보조 스트림 생성 보조 스트림 체인 – 다른 보조 스트림과 연결되어 역할 수행

5절. 보조 스트림 문자 변환 보조 스트림 소스 스트림이 바이트 기반 스트림이지만 데이터가 문자일 경우 사용 Reader와 Writer는 문자 단위로 입출력 - 바이트 기반 스트림보다 편리 문자셋의 종류를 지정할 수 있기 때문에 다양한 문자 입출력 가능 InputStreamReader OutputStreamWriter

5절. 보조 스트림 성능 향상 보조 스트림 입출력 성능에 영향을 미치는 입출력 소스 하드 디스크 느린 네트워크 버퍼를 이용한 해결 (p.1032~1037) 입출력 소스와 직접 작업하지 않고 버퍼(buffer)와 작업 - 실행 성능 향상 프로그램은 쓰기 속도 향상 버퍼 차게 되면 데이터를 한꺼번에 하드 디스크로 보내 출력 횟수를 줄여줌

5절. 보조 스트림 BufferedInputStream, BufferedReader BufferedOutputStream과 BufferedWriter

5절. 보조 스트림 기본 타입 입출력 보조 스트림 입출력 순서를 맞추어 사용

5절. 보조 스트림 프린터 보조 스트림 println()은 데이터 끝에 개행문자 추가, printf는 format string 출력

5절. 보조 스트림 객체 입출력 보조 스트림 객체를 파일 또는 네트워크로 입출력할 수 있는 기능 제공 객체 직렬화 객체는 문자가 아니므로 바이트 기반 스트림으로 데이터 변경 필요 ObjectInputStream, ObjectOutputStream 직렬화가 가능한 클래스(Serializable) 자바에서는 Serializable 인터페이스를 구현한 클래스만 직렬화 할 수 있도록 제한, transient 필드는 제외 객체 직렬화 할 때 private 필드 포함한 모든 필드를 바이트로 변환 가능

5절. 보조 스트림 serialVersionUID 필드 (p.1047~1049) 직렬화된 객체를 역직렬화 할 때는 직렬화 했을 때와 같은 클래스 사용 클래스의 이름이 같더라도 클래스의 내용이 변경된 경우 역직렬화 실패 serialVersionUID 같은 클래스임을 알려주는 식별자 역할 Serializable 인터페이스 구현 컴파일 시 자동적으로 serialVersionUID 정적 필드 추가 재컴파일하면 serialVersionUID의 값 변경 불가피한 수정 있을 경우 명시적으로 serialVersionUID 선언

5절. 보조 스트림 writeObject()와 readObject() 메소드 writeObject(ObjectOutputStream out) - 직렬화 직전 자동 호출 - 추가 직렬화할 내용 작성 가능 readObject(ObjectInputStream in) - 역직렬화 직전 자동 호출 - 추가 역직렬화 내용 작성 가능 추가 직렬화 및 역직렬화 필요한 경우 - 부모 클래스가 Serializable 구현하지 않고, 자식 클래스가 Serializable 구현한 경우 - 부모 필드는 직렬화에서 제외 > writeObject() 에서 부모 필드 직렬화 필요 > readObject()에서 부모 필드 역직렬화 필요 > 부모 클래스가 Serializable 구현하도록 하는 게 제일 쉬움

6절. 네트워크 기초 네트워크 여러 대의 컴퓨터를 통신 회선으로 연결한 것 홈 네트워크: 컴퓨터가 방마다 있고, 이들 컴퓨터를 유무선 등의 통신 회선 으로 연결 지역 네트워크: 회사, 건물, 특정 영역에 존재하는 컴퓨터를 통신 회선으로 연결한 것 인터넷: 지역 네트워크를 통신 회선으로 연결한 것

6절. 네트워크 기초 서버와 클라이언트 서버: 서비스를 제공하는 프로그램 클라이언트: 서비스를 받는 프로그램 웹 서버, FTP서버, DBMS, 메신저 서버 클라이언트의 연결을 수락하고, 요청 내용 처리한 후 응답 보내는 역할 클라이언트: 서비스를 받는 프로그램 웹 브라우저, FTP 클라이언트, 메신저 네트워크 데이터를 필요로 하는 모든 애플리케이션이 해당(모바일 앱 포함)

6절. 네트워크 기초 IP 주소와 포트(port) IP(Internet Protocol) 주소 네트워크상에서 컴퓨터를 식별하는 번호 네트워크 어댑터(랜 (Lan) 카드) 마다 할당 IP 주소 확인 법 – 명령 프롬프트 (cmd.exe) 사용 xxx.xxx.xxx.xxx 형식으로 표현 (xxx는 0~255 사이의 정수)

6절. 네트워크 기초 포트(Port) 같은 컴퓨터 내에서 프로그램을 식별하는 번호 클라이언트는 서버 연결 요청 시 IP 주소와 Port 같이 제공 0~65535 범위의 값을 가짐 포트 범위는 세 가지로 구분

6절. 네트워크 기초 InetAddress로 IP 주소 얻기 (p.1055~1056) java.net.InetAddress 도메인 이름을 DNS에서 검색한 후 IP 주소를 가져오는 기능 제공

7절. TCP 네트워킹 TCP(Transmission Control Protocol) 특징 java.net API 연결 지향적 프로토콜 -> 시간 소요 통신 선로 고정 -> 전송 속도 느려질 수 있음 데이터를 정확하고 안정적으로 전달 java.net API ServerSocket, Socket ServerSocket과 Socket 용도

7절. TCP 네트워킹 ServerSocket 생성과 연결 수락 ServerSocket 생성과 포트 바인딩 연결 수락 생성자에 바인딩 포트 대입하고 객체 생성 연결 수락 accept() 메소드는 클라이언트가 연결 요청 전까지 블로킹  대기 연결된 클라이언트 IP 주소 얻기 ServerSocket 포트 언바인딩 더 이상 클라이언트 연결 수락 필요 없는 경우

7절. TCP 네트워킹 Socket 생성과 연결 요청 Socket 생성 및 연결 요청 연결 끊기 java.net.Socket 이용 서버의 IP 주소와 바인딩 포트 번호를 제공하면 생성과 동시에 사용가능 연결 끊기 Exception 처리 필요 1061 페이지 예제를 통해 생성  연결  끊기 이해

7절. TCP 네트워킹 Socket 데이터 통신 Socket 객체로 부터 입출력 스트림 얻기 연결 성공 후 클라이언트가 서버에 “Hello Server” 서버가 데이터 받음 서버가 클라이언트에 “Hello Client” 보냄 클라이언트가 데이터 받음 read()의 블로킹 해제

7절. TCP 네트워킹 스레드 병렬 처리 블로킹(대기 상태)가 되는 메소드 병렬 처리의 필요성 ServerSocket의 accept() Socket 생성자 또는 connect() Socket의 read(), write() 병렬 처리의 필요성 스레드가 블로킹되면 다른 작업을 수행하지 못한다. 입출력 할 동안 다른 클라이언트의 연결 요청 수락 불가 입출력 할 동안 다른 클라이언트의 입출력 불가 UI 생성/변경 스레드에서 블로킹 메소드를 호출하지 않도록 UI 생성 및 변경이 안되고 이벤트 처리 불가

7절. TCP 네트워킹 스레드 병렬 처리 Accept(), connect(), read(), write()는 별도 작업 스레드 생성

7절. TCP 네트워킹 스레드풀 사용해 스레드 수 관리 스레드풀은 스레드 수 제한해 사용 갑작스런 클라이언트의 폭증은 작업 큐의 작업량만 증가 서버 성능은 완만히 저하 대기하는 작업량 많아 개별 클라이언트에서 응답을 늦게 받기도

7절. TCP 네트워킹 채팅 서버 및 클라이언트 구현 (p.1068~1086) 서버 클라이언트 startServer () Executor Service , 서버소켓 생성, 포트 바인딩, 연결수락 코드 stopServer() 연결된 모든 소켓, 서버소켓 닫기, Executor Service 종료 클라이언트 클래스 다수 클라이언트 관리  각자 클라이언트 인스턴스 생성해 관리 UI 생성 코드 (javaFX 이용한 UI 생성 코드) 클라이언트 Startclient() – 소켓 생성 및 연결요청 코드 Stopclient() – 소켓 통신 닫는 기능도 포함 Receive () – 서버에서 보낸 데이터 받음 Send(String data) - 사용자가 보낸 메시지 서버로 보냄 UI 생성 코드

8절. UDP 네트워킹 UDP(User Datagram Protocol) 특징 비연결 지향적 프로토콜 연결 절차 거치지 않고 발신자가 일방적으로 데이터 발신하는 방식 TCP 보다는 빠른 전송 통신 선로가 고정적이지 않음 데이터 패킷들이 서로 다른 통신 선로 통해 전달될 수 있음 먼저 보낸 패킷이 느린 선로 통해 전송될 경우, 나중에 보낸 패킷보다 늦게 도착 가능 데이터 손실 발생 가능성 일부 패킷은 잘못된 선로로 전송되어 유실 가능 데이터 전달 신뢰성 떨어짐

8절. UDP 네트워킹 java.net API UDP 네트워킹 구현 예제 (p.1087~1091) DatagramSocket, DatagramPacket UDP 네트워킹 구현 예제 (p.1087~1091) 발신자 구현 코드 – 소켓 통해 데이터 패킷 전송 수신자 구현 코드 – 바인딩한 특정 포트로 데이터 받아 저장 DatagramSocket 닫기