Chap11 네트워킹 11.1 네트워킹의 개요와 java.net 패키지 11.2 인터넷 주소와 URL 11.3 TCP 소켓 11.4 UDP 소켓
11.1 네트워킹의 개요와 java.net 패키지 자바는 사용자가 네트웍의 세부 구조를 모르고도 네트웍 기능을 편리하게 사용할 수 있는 기능들을 java.net 패키지로 제공하고 있다 사용자는 java.net 패키지에서 제공되는 클래스들을 이용하여 네트워킹 관련 프로그램을 작성
11.1 네트워킹의 개요와 java.net 패키지 11.1.1 TCP/IP(Transmission Control Protocol / Internet Protocol) 프로토콜 : 네트웍으로 연동되기 위해 상호 연동방법을 정의한 규약 인터넷의 표준 프로토콜 4개의 기능 계층으로 구성 : 대부분의 통신 응응 프로그램들은 응용 계층에서 사용 응용 계층 (HTTP, FTP, TELNET 등) 전달계층 (TCP, UDP 등) 인터넷 계층 (IP등) 네트워크 인터페이스 계층 (device driver 등) 하드웨어
11.1 네트워킹의 개요와 java.net 패키지 11.1.2 TCP와 UDP 전달계층은 크게 TCP와 UDP로 구분된다 패킷(packet) 단위로 전송 TCP 연결성 통신 방식(전화) 신뢰성 보장 TELNET, HTTP, FTP 등 UDP 비 연결성 통신 방식(편지) 모든 패킷이 목적지의 주소를 가진다 신뢰성이 낮다 TCP 보다 네트웍 부하가 덜하다 PING 등
11.1 네트워킹의 개요와 java.net 패키지 11.1.3 소켓(socket) 11.1.4 포트(port) 컴퓨터가 연결된 컴퓨터의 끝점(전기의 소켓과 유사한 개념) 정보 송신 : 소켓에 보낼 정보를 Write 정보 수신 : 소켓으로부터 정보를 Read TCP/IP 소켓 TCP 소켓 UDP 소켓 11.1.4 포트(port) 하나의 컴퓨터에서 다수개의 네트웍 관련 프로그램을 서로 다른 포트를 사용하여 동시에 실행시킬 수 있다(실제 네트웍 라인은 하나) 논리적인 개념 포트 번호로 16비트 사용 예 : 203.233.51.44:8088
11.1 네트워킹의 개요와 java.net 패키지 11.1.5 Java.net 패키지 ContenHandler DatagramPacket DatagramSocket MulticastSocket DatagramSocketImpl InetAddress Object SeverSocket Socket SocketImpl URL URLConnection HttpURLConnection URLEncoder URLStreamHandler
11.2 인터넷 주소와 URL 전화번호처럼 인터넷에도 주소(번호)가 있다 IP(Internet Protocol) 주소 : 컴퓨터 상호간에 사용하는 물리적 주소 도메인(Domain) 주소 : 일반적인 사용자가 사용하는 논리적 주소 사용자는 인터넷에서 논리적 주소(예:www.hollywood.com)를 사용하지만 컴퓨터 상호간에는 물리적 주소(134.23.33.200)로 통신이 이루어 진다 사용자가 사용한 논리적 주소는 인터넷 상에 있는 DNS(Domain Name System)에 의해 자동으로 물리적 주소로 변환되어 사용된다 URL(Uniform Resource Locator)은 웹 상에서 사용하는 주소체계이다 형식 Protocol://host-name:port/filename(경로포함 한 파일이름)
11.2 인터넷 주소와 URL 11.2.1 InetAddress 클래스 인터넷 주소와 관련된 기능을 제공하는 클래스 메소드이름 설명 boolean equals(InetAddress other) 현 객체가 other 객체와 같은 주소를 가지면 true, 아니면 false를 반환 byte[] getAddress() 주소를 나타내는 4개의 요소를 가진 바이트 배열을 반환 String getHostAddress() 주소 정보를 나타내는 문자열을 반환 String getHostName() 컴퓨터 이름을 나타내는 문자열을 반환 InetAddress getLocalHost() throws UnknownHostException 현재 컴퓨터를 나타내는 InetAddress 객체를 반환 InetAddress getByName(String hostName) throws UnknownHostException hostName으로 지정된 컴퓨터를 나타 내는 InetAddress 객체를 반환 InetAddress[] getAllByName(String hostName) throws UnknownHostException hostName으로 지정된 모든 컴퓨터(하나의 도메인 이름으로 여러 대의 컴퓨터를 사용하는 경우)를 나타내는 InetAddress 객체들의 배열을 반환
11.2 인터넷 주소와 URL 예제 : AddressTest.java
11.2 인터넷 주소와 URL 11.2.2 URL 클래스 WWW에서 사용하는 URL에 관한 정보를 제공 생성자 URL(String protocol, String host, int port, String file) throws MalformedURLException URL(String protocol, String host, String file) throws MalformedURLException URL(String urlString) throws MalformedURLException protocol, host, port, file : URL의 구성요소 urlString : URL의 모든 요소를 하나의 문자열로 표현한 것
11.2 인터넷 주소와 URL URL 클래스의 주요 메소드 예제 : KbsURL.java 메소드 이름 설명 String getFile() URL의 파일 이름을 반환 String getHost() URL의 호스트 이름을 반환 String getPort() URL의 포트 번호를 반환. 묵시적인 포트인 경우 –1 반환 String getProtocol() URL의 프로토콜 이름을 반환 String toExternalForm() 전체 URL의 문자열 객체를 반환 InputStream openStream() throws IOException 지정된 URL로부터 정보를 읽어들이기 위한 객체를 반환 URLConnection openConnection() 지정된 URL과 연결후 URLConnection 객체를 반환
11.2 인터넷 주소와 URL 11.2.3 URLConnection 클래스 네트웍으로 연결된 원격지 컴퓨터의 자원을 알아내는 기능을 제공하는 클래스 URLConnection 클래스의 주요 메소드 메소드 이름 설명 int getContentLength() 해당 문서의 길이를 바이트 수로 반환 String getContentType() 해당 문서의 타입을 반환 long getDate() 해당 문서의 생성 날짜를 반환 long getExpiration() 해당 문서의 파기 날짜를 반환 long getLastModified() 해당 문서의 마지막 수정 날짜를 반환 InputStream getInputStream() throws IOException 원격지로부터 정보를 읽어 들이기 위한 InputStream 객체를 생성하여 반환
11.2 인터넷 주소와 URL URL 클래스와 URLConnection 클래스를 이용하여 원격지 자원을 가져오는 순서 2) OpenConnection() 메소드를 이용하여 URLConnection 객체 생성 3) URLConnection 객체를 이용하여 속성을 알아낸다 4) URLConnection 클래스의 getInputStream() 메소드나 URL 클래스의 openStream() 메소드를 이용하여 원격지로부터 정보를 읽기 위한 InputStream 객체를 생성. URL 클래스의 openStream() 메소드를 사용하는 경우 이 메소드는 자동으로 URL 클래스의 OpenConnection() 메소드를 호출한 다음 openStream() 메소드를 수행 5) InputStream 객체를 이용하여 원격지의 정보를 Read 예제 : KbsURLConnection.java
11.3 TCP 소켓 자바는 TCP 기반의 클라이언트-서버 통신을 위해 ServerSocket, Socket 클래스를 제공 클라이언트-서버 환경에서의 서버측 프로그램은 데몬 프로그램처럼 실행 상태로 클라이언트의 요청을 기다린다 ServerSocket 클래스 생성자 ServerSocket(int port) throws IOException) port : 클라이언트의 요청을 받아들일 포트 번호 메소드 메소드 이름 설명 Socket accept() throws IOException 클라이언트의 요청을 받아들인 다음, Socket 클래스 객체를 반환 void close() throws IOException 서버 소켓을 닫는다
11.3 TCP 소켓 Socket 클래스 : 클라이언트와 서버 사이의 실질적인 정보 교환 생성자 Socket(String hostName, int port) throws UnknownHostException, IOException hostName : 연결을 원하는 컴퓨터의 주소(예: 203.233.50.5 또는 sslab.daehan. ac.kr) port : 연결할 포트 번호
11.3 TCP 소켓 Socket 클래스의 주요 메소드 메소드 이름 설명 InputStream getInputStream() throws IOException 현재의 소켓과 관련된 InputStream 객체를 반환 OutputStream getOutputStream() 현재의 소켓과 관련된 OutputStream 객체를 반환 void close() throws IOException 소켓을 닫는다 InetAddress getInetAddress() 현재 소켓에 연결된 컴퓨터의 주소를 반환 InetAddress getLocalAddress() 현재 소켓을 사용하고 있는 컴퓨터의 주소를 반환 int getPort() 현재 소켓에 연결된 컴퓨터의 포트 번호를 반환 int getLocalPort() 현재 소켓이 사용하고 있는 포트 번호를 반환
11.3 TCP 소켓 TCP 소켓의 동작 방법 클라이언트 서버 Socket ServerSocket Socket new Socket ServerSocket 네트웍 accept()
11.3 TCP 소켓 클라이언트-서버의 동작 순서 서버측 클라이언트 측 1) ServerSocket 클래스를 이용하여 서버 소켓 객체를 생성한 다음 클라이언트의 요청을 기다린다 2) 클라이언트의 요청이 발생되면 요청을 받아들여 Socket 객체를 생성 3) Socket 객체를 이용하여 입출력을 위한 스트림을 생성 4) 통신을 수행 5) 소켓을 닫는다 클라이언트 측 1) 연결을 원하는 서버의 주소와 포트 번호로 Socket 객체를 생성 2) Socket 객체를 이용하여 입출력을 위한 스트림을 생성 3) 통신을 수행 4) 소켓을 닫는다
11.3 TCP 소켓 예제 : ServerSide.java 예제 : ClientSide.java
11.4 UDP 소켓 UDP(User Datagram Protocol) 비연결성 통신 방식 높은 신뢰성이 요구되지 않는 분야에 이용 TCP에 비해 네트웍에 부담을 주지 않는다 자바는 UDP를 지원하기 위해 DatagramPacket, DatagramSocket 클래스 제공
11.4 UDP 소켓 DatagramPacket 클래스 정보를 주고 받기 위한 준비과정의 기능을 제공하는 클래스 생성자 DatagramPacket(byte[] buffer, int size) : 데이터를 수신하는 응용 프로그램에서 사용하는 생성자 buffer : 수신되는 데이터를 저장할 바이트 배열 size : 배열의 크기 DatagramPacket(byte[] buffer, int size, InetAddress ia, int port) : 데이터를 송신하는 응용프로그램에서 사용하는 생성자 buffer : 송신될 데이터가 저장되어 있는 배열 ia : 정보가 보내질 컴퓨터의 주소이며 InetAddress 객체를 사용하여 지정 port : 컴퓨터의 포트 번호
11.4 UDP 소켓 DatagramPacket 클래스의 주요 메소드 메소드 이름 설명 InetAddress getAddress() 수신 응용 프로그램에서 사용한다. 정보를 보낸 컴퓨터의 주소를 반환 byte[] getData() 패킷으로부터 데이터를 읽어 들여 바이트 배열로 반환 int getLength() 패킷의 바이트 수를 반환 int getPort() 포트번호를 반환 void setAddress(InetAddress ia) ia를 주소로 설정 void setData(byte buffer[]) buffer의 내용을 패킷의 데이터로 설정 void setLength(int size) 패킷의 크기를 size로 설정 void setPort(int pt) 포트번호를 pt 값으로 설정
11.4 UDP 소켓 DatagramSocket 클래스 DatagramSocket 클래스의 주요 메소드 실제 정보를 주고 받는 기능을 제공하는 클래스 생성자 DatagramSocket() throws SocketException DatagramSocket(int port) throws SocketException port : 소켓이 사용할 포트 번호 DatagramSocket 클래스의 주요 메소드 메소드 이름 설명 void receive(DatagramPacket dgram) throws IOException 현재의 소켓으로부터 정보를 읽어 dgram 패킷에 저장 void send(DatagramPacket dgram) 현재의 소켓을 통하여 dgram 패킷을 전송 void close() throws IOException 소켓을 닫는다
11.4 UDP 소켓 예제 : UDPReceiver.java 예제 : UDPSender.java