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에서 클라이언트를 작동해보자.



+ Recent posts