이롭게 현명하게

[JAVA] UDP 통신 본문

JAVA

[JAVA] UDP 통신

dev_y.h 2023. 1. 19. 18:48
728x90
반응형


 

목차

UDP란?

DatagramSocket 클래스

DatagramPackt 클래스

UDP를 사용하여 데이터 주고받기

 


 


[UDP(User Datagram Protlcol)란?]

TCP 프로토콜을 이용한 통신방법은 전화와 비슷하다. 상대방이 전화 수락을 해야지만 연결이 된다. 즉, 연결이 종료되기 전까지는 데이터 통신이 가능하다.

TCP 프로토콜 통신 과정

UDP 프로토콜을 이용한 통신 방법은 편지와 비슷하다. 편지 봉투 하나에는 하나의 편지가 들어가게 된다. 하지만 하나의 봉투 안에 다 넣을 수 없다면 여러 개의 봉투를 사용할 수 있다. 똑같은 시간에 발송한 편지라도 도착시간은 각각 다를 수 있고 편지의 순서 또한 바뀔 수 있다. 최악의 경우에는 편지가 배송 중에 분실될 수 있다.

데이터가 중간에 분실이 되는 경우도 있고, 도착 순서가 일치하지 않는 경우도 있다. 그래서 UDP는 높은 신뢰도가 필요하지 않은 상황에서 사용이 된다. 데이터 그램은 UDP프로토콜을 구현하고 있어 각각의 데이터그램 패킷마다 주소를 가지고 있다. UDP 프로토콜은 신뢰도를 신경 쓰지 않으므로 더 빠른 속도를 낼 수 있다. 또한 연결을 설정하지 않아도 되므로 오버헤드가 적다.

자바에서는 UDP를 DatagramPacket과 DatagramSocket클래스로 지원한다.

 


[DatagramSocket 클래스]

DatagramSocket()은 UDP 프로토콜을 사용하는 소켓을 생성한다.

DatagramPacket 객체만을 보내고 받을 수 있고, DatagramPacket 객체 안에 목적지 주소와 포트 번호가 포함되어 있다.

TCP 프로토콜과의 차이점으로 서버 소켓과 클라이언트 소켓의 구분이 없다.


[DatagramPacket 클래스]

DatagramPacket은 UDP 프로토콜을 사용해서 데이터를 보내기 위한 클래스로 두 가지 형태의 생성자가 있다.

1. 수신 컴퓨터를 위한 형태로 버퍼만 지정

2. 송신 컴퓨터를 위한 형태로 상대방의 주소와 포트 번호가 추가로 전달

 

 


[UDP를 사용하여 데이터 주고받기]

 

UDP 통신 방식은 편지와 비슷하다고 하였다.

편지는 편지지에 내용을 작성하고 작성한 편지지를 편지 봉투에 넣어 봉투의 겉면에는 받는 사람의 주소를 작성한다.

UDP패킷도 이와 같은 방법으로데이터를 가지고 있는 DatagramPacket 객체를 생성하고 여기에 수신 컴퓨터의 주소를  적는다.

Sender.java

String s = "Send message";
byte[] buf = s.getBytes();
DatagramSocket socket = new DatagramSocket(5000);
//"address"의 "port"에 있는 클라이언트에게 데이터를 보낸다.
InetAddress address = new InetAddress("127.0.0.1");//로컬 호스트
DatagramPacket packet = new DatagramPacket(buf, buf.length,address,5000);
socket.send(packet);

 

Receiver.java

byte[] buf = new byte[256];
DatagramSocket socket = new DatagramSocket(5000);
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);

 

먼저 Receiver.java를 실행 시킨다. receive() 메소드에서 패킷이 도착할 때 까지 기다려야하기 때문이다.

그 다음 Sender.java를 실행하면 Receiver에서 결과가 나타난다.


잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊

댓글과 좋아요는 큰 힘이 됩니다!

728x90
반응형
Comments