728x90
UDP 프로그래밍
@2024.04.23
UDP 프로그래밍
💡
자바에서는 java.net package에 DatagramSoket과 DatagramPack 클래스를 사용하여 구현
Echo 프로그래밍(UDP)
💡
클라이언트가 서버에 메시지를 보내면, 서버가 동일한 메시지를 클라이언트에게 되돌려주는 간단한 네트워크 애플리케이션이다.
- 연결이 없는 통신을 사용하므로, 서버와 클라이언트 간의 연결 설정 없이 바로 데이터를 송수신
[ Echo Server 구현 ]
- DatagramSocket 객체 생성
- 서버는 DatagramSocket 객체를 생성하여 특정 포트에서 클라이언트의 데이터 그램을 기다린다.
DatagramSocket datagramSocket = new DatagramSocket(8888);
- 데이터 수신 및 응답
- DatagramPacket을 사용하여 클라이언트로부터 데이터를 받는다.
- 그 후 동일한 데이터를 클라이언트에게 다시 보낸다
while(true){ byte[] receiveData = new byte[1024]; byte[] sendData; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); datagramSocket.receive(receivePacket); String message = new String(receivePacket.getData()).trim(); InetAddress clientAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); DatagramPacket sendPacket = new DatagramPacket(message.getBytes(),message.getBytes().length, clientAddress,port); datagramSocket.send(sendPacket); }
- 소켓 종료
- 서버는 더 이상 데이터 송수신이 필요 없을 때 DatagramSocket 을 닫아 자원을 해제한다.
datagramSocket .close();
- 전체 코드
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPEchoServer { public static void main(String[] args) { // UDP 통신 특정 Port에 DatagramSocket 생성 try { DatagramSocket datagramSocket = new DatagramSocket(8888); while(true){ byte[] receiveData = new byte[1024]; byte[] sendData; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); datagramSocket.receive(receivePacket); String message = new String(receivePacket.getData()).trim(); InetAddress clientAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); DatagramPacket sendPacket = new DatagramPacket(message.getBytes(),message.getBytes().length, clientAddress,port); datagramSocket.send(sendPacket); } }catch (Exception e){ e.printStackTrace(); } } }
[ Echo Client 구현 ]
- DatagramSocket 객체 생성
- 클라이언트는 DatagramSocket 객체를 생성하여 데이터를 전송할 준비를 한다
DatagramSocket clientSocket = new DatagramSocket();
- 데이터 전송 및 응답 수신
- 클라이언트는 DatagramPacket에 데이터를 담아 서버로 보내고, 서버로부터 동일한 데이터를 받는다.
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in); //키보드로 입력 받아서 System.out.print("보낼 메시지를 입력하세요 >> "); String message = keyboard.readLine(); // 서버로 보내기 DatagramPacket sendPacket = new DatagramPacket(message.getBytes(),message.getBytes().length, IpAddress, 8888); clientSocket.send(sendPacket); // 서버로부터 받기 DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length); clientSocket.receive(receivePacket); String receiveMessage = new String(receivePacket.getData()).trim(); System.out.println(receiveMessage);
- 소켓 종료
- 데이터 송수신이 끝나면 클라이언트는 DatagramSocket을 닫는다.
clientSocket.close(); keyboard.close();
- 전체 코드
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPEchoClient { public static void main(String[] args) { try(DatagramSocket clientSocket = new DatagramSocket(); BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in)); ){ // 서버의 주소 설정 InetAddress IpAddress = InetAddress.getByName("localhost"); byte[] sendData; byte[] receiveData = new byte[1024]; //키보드로 입력 받아서 System.out.print("보낼 메시지를 입력하세요 >> "); String message = keyboard.readLine(); // 서버로 보내기 DatagramPacket sendPacket = new DatagramPacket(message.getBytes(),message.getBytes().length, IpAddress, 8888); clientSocket.send(sendPacket); // 서버로부터 받기 DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length); clientSocket.receive(receivePacket); String receiveMessage = new String(receivePacket.getData()).trim(); System.out.println(receiveMessage); }catch (Exception e){ e.printStackTrace(); } } }
728x90