Language/JAVA

[JAVA] UDP 기반 통신 (JAVA 네트워크) | Yoon's Dev

Yooniron 2021. 6. 12. 17:33

UDP 기반 통신 (JAVA 네트워크)

 

 

 


1. InetAddress 클래스

 

 InetAddress 클래스

✓ 인터넷 주소와 관련된 기능을 제공하는 클래스

✓ IP 주소를 액세스 하기 위한 추상층을 제공

✓ IPv6용 프로그램으로 포팅 할 때 투명성 유지 가능

 

 

□ InetAdress 클래스의 메서드

메서드 이름 설명
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 객체들의 배열을 반환

 

 


 

2. UDP

 

 UDP(User Datagram Protocol)

✓ 비연결성 통신 방식

✓ 높은 신뢰성이 요구되지 않는 분야에 이용

✓ TCP에 비해 네트웍 부담을 주지 않음

✓ 자바는 UDP를 지원하기위해

   . DatagramPacket

   . DatagramSocket 클래스 제공

 


 

3. DatagramPacket 클래스

 

DatagramPacket 클래스

✓ DatagramPacket 클래스

   - 정보를 주고받기 위한 준비과정의 기능을 제공하는 클래스

✓ 생성자

   - DatagramPacket(byte[] buffer, int size)

    : 데이터를 수신하는 응용 프로그램에서 사용하는 생성자

     . buffer: 수신되는 데이터를 저장할 바이트 배열

     . size: 배열의 크기

   - DatagramPacket(byte[] buffer, int size, InetAddress ia, int port)

   : 데이터를 송신하는 응용프로그램에서 사용하는 생성자

    . buffer : 송신될 데이터가 저장되어 있는 배열

    . size : 배열의 크기

    . ia : 정보가 보내질 컴퓨터의 주소이며 InetAddress 객체를 사용하여 지정

    . port : 컴퓨터의 포트 번호

 

 

□ DatagramPacket 클래스의 메서드

메서드 기능
InetAddress getAddress() 데이터그램의 주소 반환
void setAddress(InetAddress iaddr) 데이터그램에 목적지 주소 설정
bytep[ getData() 데이터그램의 데이터 반환
void setData(byte[] buf) 데이터그램의 데이터 설정
void setData(byte[] buf, int offset, int length) byte 배열의 offset부터 length 만큼을 데이터그램에 데이터로 설정
int getLength() 데이터의 길이나 수신할 데이터의 최대 크기 반환
void setLength(int length) 수신할 데이터의 최대 길이 설정
int getPort() 데이터그램의 포트 반환
void setPort(int iport) 데이터그램의 포트 설정

 

 

 

4. DatagramSocket 클래스

 

 DatagramPacket 클래스

✓ DatagramSocket을 사용해 통신할 때의 순서

   - DatagramScoket 클래스의 인스턴스를 구성

   . 이때 클라이언트는 로컬 주소와 포트를 선택적으로 지정

   . 서버의 경우 포트를 지정

   - DatagramSocket 클래스의 send() receive() 메서드 사용,

     DatagramPacket 클래스의 인스턴스를 주고받음으로써 통신

   - 통신이 끝나면 DatagramSocket 클래스의 close() 메서드 호출로 소켓 차단

 

□ DatagramSocket 생성자

메서드 기능
DatagramSocket() 포트와 로컬 주소를 지정하지 않는 생성자
DatagramSocket(int port) 특정 포트의 데이터그램만을 수신하도록 포트번호를 지정하는 생성자
DatagramSocket(int port, InetAddress laddr) 특정 로컬 주소와 포트의 데이터그램만을 수신하도록 로컬 주소와 포트번호를 지정하는 생성자
DatagramSocket(SocketAdrress bindaddr) 로컬 주소와 포트번호가 바인딩 되어있는 주소 클래스인 SocketAddress를 인자로 사용하는 생성자

 

□ DatagramSocket 클래스의 메서드

 

메서드 기능
void connect(InetAddress address, int port) 특정 원격 주소와 포트를 지정, 주소가 지정이 되면 다른 주소나 포트로부터 수신한 데이터그램은 무시
void disconnect() 소켓에 지정된 주소와 포트 제거
InetAddress getInetAddress() 원격 소켓의 주소와 포트 반환
InetAddress getLocalAddress() 소켓의 주소와 포트 반환
int getLocalPort() 소켓의 포트 반환
int getSoTimeout() receive() 메서드가 수신을 위해 대기하는 시간 반환
void setSoTimeout(int timeout) receive() 메서드가 수신을 위해 대기하는 시간 설정
void receive(DatagramPacket p) 현재의 소켓으로부터 정보를 읽어 dgram 패킷에 저장
void send(DatagramPacket p) 현재의 소켓을 통하여 dgram 패킷을 전송