자바프로그래밍 언어: 네트워크<2>

 

10. UDP

UDP(User Datagram Protocol)
UDP는 비 연결 지향이고, IP 위에 매우 얇은 레이어로 구성되어 있다.
UDP를 사용하는 애플리케이션은 TCP 프로그램에 비해 제어를 할 수 있는 부분이 적다.
UDP는 데이터를 전송할 때에 데이터가 잘 도착했는지 알아낼 방법이 없으며, 데이터를 보낸 순서대로 도착한다는 보장도 할 수 없다.
UDP는 TCP에 비해 훨씬 빠르게 전달된다는 장점이 있다.


DatagramPacket 클래스
UDP 데이터그램은 java.net.DatagramPacket 클래스로 추상화한 것이다.
DatagramPacket 클래스는 애플리케이션에서 주고 받을 데이터와 관련된 클래스이고, DatagramSocket 클래스는 실제 데이터의 전송을 책임지게 된다.
DatagramPacket 클래스는 데이터를 송신하기 위한 기능과 수신을 하기 위한 기능으로 분리된다.

DatagramPacket 클래스의 생성자
DatagramPacket의 생성자는 데이터를 보내기 위한 생성자와 데이터를 받기 위한 생성자로 구분된다.

DatagramPacket 클래스의 메서드
IP 헤더에 출발지 주소와 목적지 주소를 설정하거나 주소를 얻어오는 메서드, 출발지 포트와 목적지 포트를 설정하거나 얻어오는 다양한 메서드 제공한다.

DatagramSocket 클래스
TCP 스트림 소켓과 달리 서버와 클라이언트 데이터 그램 소켓 사이에는 차이가 없으며 모든 데이터그램 소켓은 데이터그램을 전송할 뿐만 아니라 수신에서 사용할 수 있다.

 

DatagramSocket 클래스의 생성자
모든 DatagramSocket 객체는 데이터그램을 수신하기 위해서 사용될 수 있기 때문에 로컬 호스트 내의 유일한 UDP 포트와 연관되어 있다.

DatagramSocket 클래스의 주요 메서드
DatagramSocket 클래스의 주요 메서드 기능은 DatagramPacket을 보내거나 받을 수 있는 메서드를 제공하는 것이다.

11. 멀티 캐스팅

유니 캐스팅관 멀티 캐스팅
클라이언트와 서버간의 지속적으로 일대 일로 통신하는 개념을 유니 캐스팅이라고 한다.
일대 다의 통신을 멀티 캐스팅이라고 한다.

 

일대 다의 통신 멀티캐스팅

유니 캐스팅 
유니 캐스팅을 구현하기 위해서는 필수 조건이 서버측에 스레드를 생성해서 TCP 소켓을 유지해야 한다. 

스레드를 이용한 유니캐스트 흐름도

 

유니 캐스트 프로그램

클래스명 설명
UnicastServer 모든 클라이언트의 TCP 요청을 받아 Socket 객체를 생성하고, Socket를 유지하기 위한 스레드를 생성하는 클래스다.
UnicastServerThread 각각의 클라이언트의 Socket 객체를 유지하기 위한 클래스다.
UnicastsClient 클라이언트가 콘솔에서 접속하기 위한 클래스다.

 

멀티 캐스팅
유니 캐스트 모델은 실시간 프로그램에서 서버의 정보를 모든 클라이언트가 공유할 때 문제점이 있다.
이런 문제를 해결할 수 있는 방법이 일대 다 전송을 지원하는 멀티 캐스팅 방법이다.
한명의 클라이언트가 서버의 정보를 변경했을 경우 모든 클라이언트에게 전송함으로써 서로가 변경된 정보를 공유할 수 있는 애플리케이션을 만들 때 적합하다.
멀티 캐스팅 프로그램을 작성하기 위해서는 유니캐스트에서 생성된 스레드를 저장하기 위한 공간(ArrayList)이 필요하며, 클라이언트에서는 자신이 보낸 메시지나 다른 클라이언트가 보낸 메시지를 받기 위한 스레드가 필요하다.

ArrayList를 이용한 멀티캐스트 흐름도

12. 프로토콜의 설계

프로토콜의 설계 정의
프로토콜이란 클라이언트와 서버간의 통신 규약이다.

 

chatting##java##안녕

메시지전송 채팅방 메시지


클라이언트가 보낸 메시지를 서버에서는 “##”를 구분자로 문자열을 토큰하여 문자를 분석하게 된다.
만약 이런 규약을 클라이언트가 위배하여 메시지의 순서를 바꾼다든지, 부적절한 메시지를 보내게 되면 서버에서는 이를 파악하지 못하고 항상 동일한 처리를 하게 되기 때문에 다른 클라이언트에게 적절치 못한 메시지를 전송하게 된다.

 

프로토콜의 설계 기법
프로토콜의 설계는 클라이언트와 서버간의 통신 규약을 만드는데 필요한 데이터가 무엇인지를 설계하는 것이다.
프로토콜의 설계 하기위해서는 클라이언트에서 필요한 기능이 무엇인지를 생각하고, 그 기능에 대해 필요한 데이터가 어떤 것이 있는지를 분석할 수 있는 능력이 있어야 한다.

 

로그인 인증을 위한 요구사항

로그인 인증을 위한 요구사항

프로토콜을 이용한 클라이언트/서버 구축
요구사항과 각각의 요구사항에 필요한 데이터의 설계가 끝났다면 이것을 가지고 프로토콜을 정의해야 한다.
프로토콜을 정의한 클래스가 Protocol.java 파일이다.

+ Recent posts