본문 바로가기
Language/Java

[Java] Socket Programming - UDP

by IsBerry 2019. 4. 30.
반응형

UDP (User Datagram Protocol)

 : 데이터그램 통신 프로토콜. 

   TCP와 다르게 비연결(Connectionless) 프로토콜.

   IP 위에 얇은 레이어로 구성되어 있음.

 

특징

 1. 패킷을 보낼 때마다 수신 측의 주소와 로컬 파일 설명자를 함께 전송해야함

 2. 비연결성이기 때문에 TCP보다 신뢰성이 떨어짐

 3. TCP보다 빠르게 데이터를 주고받을 수 있음

 4. TCP에 비해 제어를 할 수 있는 부분이 적음.

 

* UDP를 이용한 프로그래밍을 하려면, 클라이언트/서버 모두 Java.net패키지 안의 DatagramSocket객체를 생성하고

  데이터를 주고받기 위해서 DatagramPacket 객체를 이용해야함.

 

DatagramPacket 클래스

 : DatagramPacket 클래스로 추상화한 것.

   주고 받을 데이터와 관련된 클래스, 실제 데이터의 전송을 책임지게됨.

 

 - 생성자

    1. 데이터 수신을 위한 생성자

생성자 설명
DatagramPacket(byte[] buf, int length) DatagramPacket길이의 패킷을 수신하기 위해 생성
DatagramPacket(byte[] buf, int offset, int length) 버퍼에 offset을 지정해, 길이의 패킷을 수신하기 위해 생성 

    2. 데이터 송신을 위한 생성자

생성자 설명
DatagramPacket(byte[] buf, int length, InetAddress address, int port) 지정된 호스트의 지정된 포트번호에 길이의 패킷을 송신하기 위해 생성

DatagramPacket(byte[] buf, ,int offset, int length, InetAddress address, int port)

지정된 호스트의 지정된 포트번호에 offset 길이의 패킷을 송신하기 위해 생성
DatagramPacket(byte[] buf, int length, SocketAddress address) 지정된 호스트의 지정된 포트번호에 길이의 패킷을 송신하기 위해 생성
DatagramPacket(byte[] buf, ,int offset, int length, SocketAddress address) 지정된 호스트의 지정된 포트번호에 offset 길이의 패킷을 송신하기 위해 생성

- 메소드

메소드 설명
InetAddress getAddress() 데이터그램이 보내지거나 수신된 컴퓨터의 IP주소반환
byte[] getData() 데이터의 버퍼를 돌려줌
int getLength() 송신/수신한 데이터의 길이를 돌려줌
int getOffset() 송신/수신한 데이터의 Offset을 돌려줌
int getPort() 데이터그램이 보내지거나 수신된 원격 호스트의 포트번호
SocketAddress getSocketAddress() 이 패킷을 보내거나 받을 원격호스트의 (ip주소 + 포트번호)를 가져옴
void setAddress(InetAddress iaddr) 이 데이터그램이 전송되는 IP주소설정
void setData(byte[] buf) 이 패킷의 데이터 버퍼 설정
void setData(byte[] buf, int offset, int length) 이 패킷의 데이터 버퍼 설정
void setLength(int length) 이 패킷의 길이 설정
void setPort(int iport) 이 데이터그래밍 전송되는 포트 번호 설정
void setSocketAddress(SocketAddress address) 이 데이그램이 보내지는 원격 호스트의 (ip주소 + 포트번호)설정

DatagramSocket 클래스

: TCP 스트림 소켓과 달리 서버와 클라이언트 데이터그램 소켓 사이에는 차이가 없음.

  모든 데이터그램 소켓은 데이터그램을 전송할 뿐만 아니라, 수신에서 사용할 수 있음.

 

- 생성자

생성자 설명
DatagramSocket() 할당한 특정포트번호가 중요하지 않다면, 사용 가능한 임시UDP포트로 소켓을 생성하여 DatagramSocket 객체를 생성함
DatagramSocket(int port) 포트번호로 소켓을 생성
DatagramSocket(int port, InetAddress iaddr) port, iaddr로 소켓을 생성

- 메소드

메소드 설명
void send(DatagramPacket dp) UDP 데이터그램을 전송하는 메소드
void receive(DatagramPacket dp) UDP 데이터그램을 받아서 이미 존재하는 DatagramPacket dp에 저장
void close()  연결해제
int getLocalPort() 현재 데이터그램을 기다리고 있는 로컬포트가 몇번인지 알려줌
void connect(InetAddress address, int port) 지정된 호스트의 지정된 포트하고만 패킷을 주고받을 것이라고 정함
disconnect() 연결된 DataSocket을 끊음
int get Port() 소켓이 연결되어 있는 원격지 포트번호를 반환함
inetAddress getInetAddress() 원결되어 있는 원격지 주소를 반환함

 

반응형