UDP는 TCP와 달리 DatagramSocket과 DatagramPacket을 사용한다.
TCP와의 차이점으로는 일방적인 전송을 하고 확인 작업이 없기 때문에 속도가 빠르지만
정확도가 낮다
Server가 될 Receiver
package chap12.exam06.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class Receiver { public static void main(String[] args) throws Exception { // 데이터를 받으려면 항시 대기하여야 하는데 while문으로 묶어버리면 // 아래의 코드가 작동되지 않으므로 따로 스레드를 만들어야함 // 1. DatagramSocket 생성 DatagramSocket socket = new DatagramSocket(5001); Thread th = new Thread(){ @Override public void run() { // 2. DatagramPacket 준비 (한번에 받은 메시지 크기) DatagramPacket packet = new DatagramPacket(new byte[100], 100); while(true) { try { socket.receive(packet); // 3. 데이터 수신 byte[] character = packet.getData(); String data = new String(character, "UTF-8").replace('\0', ' '); System.out.println(data); // 4. 받은 데이터 출력 } catch (IOException e) { e.printStackTrace(); break; } } } }; th.setDaemon(true); // main이 끝나면 같이 죽도록 설정 th.start(); // 스레드 실행 // 5. 자원 정리 Thread.sleep(10000); socket.close(); // 소켓을 닫고 // 종료 } }
Client가 될 Sender
package chap12.exam06.udp; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; public class Sender { public static void main(String[] args) throws Exception { // 1. DatagramSocket 생성 DatagramSocket socket = new DatagramSocket(); // 2. 보낼 메시지 준비 for(int i = 1; i <= 3; i++) { String msg = "data_" + i; byte[] arr = msg.getBytes(); // 3. DatagramPacket으로 전송 DatagramPacket packet = new DatagramPacket(arr, arr.length, new InetSocketAddress("localhost", 5001)); socket.send(packet); } // 4. 자원 반납 socket.close(); } }
서버는 이클립스에서 실행하고
클라이언트를 따로 실행해야 하는데
https://qdgbjsdnb.tistory.com/79 를 참조하여 cmd에서 클라이언트를 작동해보자.
'개념 및 코딩 > 10.네트워크' 카테고리의 다른 글
[JAVA]10-06.File Sender, Receiver (0) | 2018.09.27 |
---|---|
[JAVA]10-05.N:M MultiChat Server, Client (2) | 2018.09.27 |
[JAVA]10-04.1:1 Chat Server, Client (0) | 2018.09.27 |
[JAVA]10-03.Echo Server, Client (0) | 2018.09.27 |
[JAVA]10-02.TCP Server, Client (0) | 2018.09.27 |