Download presentation
Presentation is loading. Please wait.
1
JAVA 프로그래밍 12장 네트워킹(Networking)
2
학습목표 이번장에서는 자바의 네트워킹 프로그램을 작성하는데 TCP/IP방식과 UDP방식의 프로그래밍이 어떠한 차이점을 이해하고 각각 어느 경우에 이들을 사용하는지 학습하고, 소켓(socket)기반에서 수행되는 네트워크 프로그래밍에 대해 학습함으로써, 자바기반의 네트워킹프로그램의 특성을 이해한다. 목차 Section1 네트워킹(Networking)의 개요 Section2 TCP/IP Section3 URL과 InetAddress Section4 소켓(Socket)을 이용한 네트워크프로그램 Section5 여러 클라이언트간에 데이터 주고 받기 JAVA 프로그래밍
3
12장- 네트워킹 Section1 네트워킹(Networking)의 개요 자바에서 지원하는 네트워킹의 개요에 대해 학습한다.
TCP/IP 프로토콜에 대해 학습한다. Section2 TCP/IP 자바에서 제공하는 URL클래스와 InetAddress클래스에 대해서 학습한다. Section3 URL과 InetAddress Section4 소켓(Socket)을 이용한 네트워크프로그램 스트림 소켓과 데이터그램 소켓을 사용한 네트워크 프로그램에 대해 학습한다. Section5 여러 클라이언트간에 데이터 주고 받기 클라이언트간에 메시지를 주고받기 위해서 쓰레드를 사용하는것에 대해 학습한다. JAVA 프로그래밍
4
1. 네트워킹(Networking)의 개요 (1/1)
네트워크(Network)란 같은 데이터 전송 프로토콜(protocol)을 가지고 통신을 하는 연결된 장치들을 총칭하는 것으로서 여러 장치들이 서로 교신하기위해서는 같은 의사소통방식을 사용해야 하는데 이런 역할을 하는 것을 프로토콜이라 한다. 어떠한 데이터가 네트워크를 통해서 전송될 때, 이와 관련된 네트워크 프로토콜 모두는 궁극적으로는 어떠한 물리적 링크에, 적절한 전기적 신호를 통해 연속적인 데이터흐름을 전송하기 위한 것이다. 이것을 통해서 애플리케이션에서는 그 데이터를 사용할 수 있는 것이다. 프로토콜간의 관계는 계층구조로서 나타낼 수 있다. JAVA 프로그래밍
5
2. TCP/IP (1/2) TCP/IP는 인터넷상에서 호스트들을 서로 연결시키는 데 사용되는 통신 프로토콜로서, 미국 국방부에서 구축한 전산망인 ARPANET에서 개발된 프로토콜이다. TCP/IP는 현재 인터넷의 표준 프로토콜이다. TCP/IP는 OSI 모델보다 먼저 개발되었다. 따라서 TCP/IP프로토콜 계층구조는 OSI 모델의 계층구조와 정확하게 일치하지 않는다. TCP/IP프로토콜은 물리계층, 데이터링크 계층, 네트워크 계층, 전송계층, 응용계층으로 구성되어 있다. 처음 네 개의 계층은 OSI 모델의 네 계층과 일치하는 물리적인 표준, 네트워크 인터페이스, 네트워크간 상호연결, 그리고 전송기능을 제공한다. OSI모델의 상위 세 계층은 TCP/IP에서 응용계층 하나의 계층으로 아래표현된다. JAVA 프로그래밍
6
2. TCP/IP (2/2) TCP/IP와 OSI모델 JAVA 프로그래밍
7
3. URL과 InetAddress (1/3) URL클래스
HTTP프로토콜(HyperText Transfer Protocol)은 인터넷상의 데이터를 지정하기 위해 URL(Uniform Resource Locator)을 사용한다. 보통 URL은 파일과 경로를 표현하고, DB검색 과 같은 복잡한 업무를 수행할 수 있다. 자바는 이러한 URL을 쉽게 조작할 수 있도록 URL클래스를 제공한다 JAVA 프로그래밍
8
3. URL과 InetAddress (2/3) InetAddress 클래스 (1/2)
InetAddress클래스는 인터넷상의 IP주소를 액세스한다. 이 클래스는 생성자를 가지고 있지 않다. 따라서 객체를 생성하려면 static메소드인 getByName()메소드, getLocalHost()메소드, getAllByName()메소드 등을 사용해야 한다. InetAddress getByName(String host) throws UnknownHostException 매개변수로 지정된 특정호스트에 대한 InetAddress 객체를 반환한다. 이 호스트는 도메인명 혹은 IP주소로 지정할 수 있다. 이 메소드 사용시 반드시 UnknownHostException처리를 해야 한다. JAVA 프로그래밍
9
3. URL과 InetAddress (3/3) InetAddress 클래스 (2/2)
InetAddress getLocalHost() throws UnknownHostException 로컬컴퓨터에 대한 InetAddress객체를 반환한다. 방화벽으로 가려진 경우 이주소는 단순히 루프백(loopback) 주소인 이다. 이 메소드 사용시 반드시 UnknownHostException처리를 해야 한다. InetAddress getAllByName(String host) throws UnknownHostException 매개변수로 지정된 특정호스트에 대하여 알려진 모든 IP주소를 InetAddress객체 배열로 반환한다. 대개 네트워크 사용량이 많은 웹 사이트의 경우, 하나의 호스트이름에 대해 여러 개의 IP주소로 등록함으로써 처리부담을 분산시키고 있다. 이 메소드 사용시 반드시UnknownHostException처리를 해야 한다. JAVA 프로그래밍
10
4. 소켓(Socket)을 이용한 네트워크프로그램 (1/11)
자바는 네크워크 프로그램을 작성하기 위해서 스트림 소켓(Stream Socket)과 데이터그램 소켓(Datagram Protocol)이란 것을 제공한다. 소켓이란 네트워크상의 동기화를 설정하는 것으로 스트림 소켓의 프로토콜은 TCP(Transmission Control Protocol)이고, 데이터그램 소켓은 UDP(User Datagram Protocol) 프로토콜을 사용한다. TCP는 전송되는 데이터들의 도착여부를 보증하지만, UDP는 보증하지 못한다. JAVA 프로그래밍
11
4. 소켓(Socket)을 이용한 네트워크프로그램 (2/11)
스트림 소켓(Stream Socket) 프로그래밍 (1/6) 스트림 소켓에서의 네트워크프로그램을 작성하는 절차 JAVA 프로그래밍
12
4. 소켓(Socket)을 이용한 네트워크프로그램 (3/11)
스트림 소켓(Stream Socket) 프로그래밍 (2/6) 1단계: ServerSocket 객체를 생성한다. 2단계: ServerSocket이 확립되면 서버는 클라이언트의 접속을 무한정 기다린다(block). 3단계 서버가 클라이언트와 통신할 수 있도록 OutputStream 과 InputStream 객체를 얻는다. ServerSocket s = new ServerSocket(port ,queueLength) Socket client = server.accept(); InputStream in = client.getInputStream() OutputStream out = client.getOutputStream() JAVA 프로그래밍
13
4. 소켓(Socket)을 이용한 네트워크프로그램 (4/11)
스트림 소켓(Stream Socket) 프로그래밍 (3/6) 4단계 서버와 클라이언트가 InputStream과 OutputStream을 통해 서로 통신을 처리하는 과정이다. 5단계 전송이 완료될 때 서버는 Socket의 close() 메소드를 가지고 접속을 종료한다. in.read(); out.write() out.close(); in.close(); client.close(); JAVA 프로그래밍
14
4. 소켓(Socket)을 이용한 네트워크프로그램 (5/11)
스트림 소켓(Stream Socket) 프로그래밍 (4/6) ServerSocket 클래스 (1/2) ServerSocket클래스는 서버가 클라이언트로부터의 네트워크를 통한 연결을 받아들일 수 있는 구조를 가진 클래스이다. 서버를 구현하기 위한 기본은 특정한 로컬 포트 번호에 대하여 ServerSocket객체를 열고, 연결을 기다리는 것이다. 이때 클라이언트가 이 포트에 대해 연결을 시도하면 서버와 클라이언트의 연결이 수립된다. ServerSocket클래스의 객체는 다음과 같은 방법으로 생성한다. port는 클라이언트와 동기화를 확립할 port번호, queueLength는 서버로 요청할 수 있는 최대 클라이언트의 수이다. ServerSocket s = new ServerSocket(port ,queueLength) JAVA 프로그래밍
15
4. 소켓(Socket)을 이용한 네트워크프로그램 (6/11)
스트림 소켓(Stream Socket) 프로그래밍 (5/6) ServerSocket 클래스(2/2) 서버는 ServerSocket 객체의 생성후 클라이언트의 연결(connect)을 무한정 기다린다. 클라이언트가 연결하면 ServerSocket 클래스의 accept() 메소드가 이를 감지한다. accept() 메소드는 ServerSocket 객체가 대기하고 있는 포트로서 클라이언트가 연결할 때까지 블락(block)되어있다가 , 클라이언트의 연결이 있으면 Socket객체를 반환한다. 한 클라이언트당 하나의 Socket객체가 생성된다. 클라이언트와 통신을 위해 생성한 Socket객체로부터 getInputStream() 메소드와 getOutputStream() 메소드를 사용하여 InputStream 객체와 OutputStream 객체를 얻어내고, 이 스트림을 통해 클라이언트와 데이터를 주고받는다. JAVA 프로그래밍
16
4. 소켓(Socket)을 이용한 네트워크프로그램 (7/11)
스트림 소켓(Stream Socket) 프로그래밍 (6/6) Socket Socket 클래스는 TCP네트워크 연결을 나타낸다. 클라이언트는 이 클래스를 사용하여 리모트 호스트(Remote Host)에 대해 스트림 기반의 통신 상태를 구축할 수 있다. Socket클래스의 객체는 다음과 같은 방법으로 생성한다. address는 서버의 IP주소이고, port는 서버와 동기화를 확립할 port번호이다. Socket c = new Socket(InetAddress address, int port) JAVA 프로그래밍
17
4. 소켓(Socket)을 이용한 네트워크프로그램 (8/11)
데이터그램 소켓(Datagram Socket) 프로그래밍 (1/1) 데이터그램 소켓(Datagram Socket)은 UDP(User Datagram Protocol) 프로토콜을 사용한다. UDP는 데이터를 일정의 크기로 자른 패킷(packet)이라 불리는 데이터의 조각을 네트워크로 흘려보낸다. 흘려보내므로 데이터의 전송을 보장하지도 않고, 수신하는 곳에서 패킷의 순서를 맞추어야한다. UDP는 비연결성(connectionless) 이기 때문에 DatagramSocket 하나만 가지고도 여러 개의 목적지로 패킷을 보낼 수 있으며, 여러 개의 발신지로부터 패킷을 받을 수 있다. JAVA 프로그래밍
18
4. 소켓(Socket)을 이용한 네트워크프로그램 (9/11)
데이터그램 소켓(Datagram Socket) 프로그래밍 (2/4) UDP패킷을 사용해서 데이터를 전송하려면 DatagramSocket객체를 생성해서 한다. 1단계: DatagramSocket객체를 생성한다. 2단계: 데이터를 전송하기 위한 DatagramPacket객체를 생성한다. 수신과 송신에 모두 DatagramPacket객체를 생성해서 데이터를 주고 받는다. DatagramSocket socket = new DatagramSocket( 3000 ) JAVA 프로그래밍
19
4. 소켓(Socket)을 이용한 네트워크프로그램 (10/11)
데이터그램 소켓(Datagram Socket) 프로그래밍 (3/4) 수신용 패킷 - 데이터의 바이트 배열명과 크기만 알면 된다 송신용 패킷 - 데이터의 바이트 배열명과 시작위치, 크기, 서버의IP주소, port번호를 가지고 생성한다. DatagramPacket receivePacket = new DatagramPacket( byte buf[], int length ); DatagramPacket sendPacket = new DatagramPacket(byte[]buf, intoffset, intlength, InetAddress address, intport); JAVA 프로그래밍
20
4. 소켓(Socket)을 이용한 네트워크프로그램 (11/11)
데이터그램 소켓(Datagram Socket) 프로그래밍 (4/4) 3단계: 패킷의 송수신을 한다. 수신 - DatagramSocket 객체의 receive()메소드를 가지고 하는데, 이때 receive()메소드의 매개변수로는 수신용 DatagramPacket객체를 사용한다. 송신 - DatagramSocket 객체의 send()메소드를 가지고 하는데, 이때 send메소드의 매개변수로는 송신용 DatagramPacket객체를 사용한다. socket.receive( receivePacket ); socket.send( sendPacket ); JAVA 프로그래밍
21
5. 여러 클라이언트간에 데이터 주고 받기 (1/2) 클라이언트간에 데이터 주고 받기 프로그램은 여러개의 소켓연결을 처리할 수 있는 다중 쓰레드 서버방식을 사용했다. 클라이언트로부터 보내진 메시지를 연결된 모든 클라이언트에 보내게 된다. 서버쪽에는 두개의 클래스를 가지고 있어야 한다. 서버 역할을 하는 메인 클래스는 클라이언트로부터 연결을 받아들이고, 이것을 쓰레드 핸들러 클래스에 넘겨준다. 쓰레드 핸들러 클래스는 메시지의 도달을 기다리고, 메시지를 받아서 모든 클라이언트에게 보낸다. 쓰레드 핸들러클래스의 객체는 클라이언트당 1개씩 생성된다. JAVA 프로그래밍
22
5. 여러 클라이언트간에 데이터 주고 받기 (2/2) 다중 쓰레드 메시지 주고 받기 프로그램은 기본적으로 3개의 부분이 필요하다. 서버 클래스: 클라이언트간에 데이터 주고 받기프로그램의 서버로 서버쪽의 메인 클래스이다. 클라이언트로부터의 연결을 받고, 쓰레드 핸들러객체를 생성하는 일에만 관여한다. 쓰레드 핸들러클래스: 서버로 들어온 클라이언트와의 연결을 개별적으로 처리하는 역할을 한다. 클라이언트가 접속할 때마다 1개 이상의 쓰레드를 만들어서 돌리기 때문에 블록킹I/O문제를 해결해 준다. 이미 연결된 클라이언트와 데이터를 주고받는 일을 맡는 쪽은 핸들쓰레드 핸들러이다. 클라이언트GUI 클래스: 기본적으로 사용자인터페이스, 사용자입력처리, 그리고 서버로부터 오는 메시지의 수신처리를 한다. JAVA 프로그래밍
Similar presentations