본문 바로가기

자바

자바 UDP통신

1. UDP통신이란?

   - TCP (연결지향 프로토콜)와 다르게 연결 없이 동작하는 비연결성 프로토콜이다.

   - 또한 서버와 클라이언트 연결 및 해제 설정이 필요없다.

   - 하지만 데이터가 잘 전송되었다는 보장을 하지 않고 데이터 유실이 생길 수 있다.

   - 따라서 데이터를 보내고 받는 즉시 처리되어 TCP보다 빠른 전송 속도를 가지고 있다.

 

 

2. UDP 예시 코드

 

서버

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPServer {
    public static void main(String[] args) {
        try (DatagramSocket serverSocket = new DatagramSocket(12345)) {
            System.out.println("UDP 서버가 시작되었습니다.");

            // 수신용 바이트 배열 생성
            byte[] receiveData = new byte[1024];

            while (true) {
                // 클라이언트로부터 데이터를 수신할 DatagramPacket 생성
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

                // 클라이언트로부터 데이터를 수신
                serverSocket.receive(receivePacket);

                // 수신한 데이터를 문자열로 변환
                String message = new String(receivePacket.getData(), 0, receivePacket.getLength());

                // 수신한 데이터 출력
                System.out.println("클라이언트에서 받은 메시지: " + message);

                // 클라이언트에게 응답 데이터 보내기
                String responseMessage = "Hello, Client!";
                byte[] sendData = responseMessage.getBytes();

                // 클라이언트의 주소와 포트 정보를 가져와서 DatagramPacket 생성
                DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, receivePacket.getAddress(), receivePacket.getPort());

                // 클라이언트에게 응답 데이터 전송
                serverSocket.send(sendPacket);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

클라이언트

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPClient {
    public static void main(String[] args) {
        try (DatagramSocket clientSocket = new DatagramSocket()) {
            // 서버 주소와 포트 정보 설정
            InetAddress serverAddress = InetAddress.getByName("localhost");
            int serverPort = 12345;

            // 보낼 메시지 설정
            String message = "Hello, Server!";
            byte[] sendData = message.getBytes();

            // 서버로 데이터 전송을 위한 DatagramPacket 생성
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, serverPort);

            // 서버로 데이터 전송
            clientSocket.send(sendPacket);

            // 서버에서 보낸 응답을 받을 바이트 배열 생성
            byte[] receiveData = new byte[1024];

            // 서버로부터 데이터를 수신할 DatagramPacket 생성
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

            // 서버로부터 데이터 수신
            clientSocket.receive(receivePacket);

            // 수신한 데이터를 문자열로 변환
            String responseMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());

            // 서버로부터 받은 응답 출력
            System.out.println("서버에서 받은 응답: " + responseMessage);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 서버는 클라이언트로부터 메시지를 수신하고, 수신한 메시지를 다시 클라이언트에게 응답하는 에코(Echo) 서버이다.

클라이언트는 서버로 메시지를 전송하고, 서버로부터 받은 응답을 출력한다.

UDP는 연결 설정이 없기 때문에 각각 독립적인 소켓을 사용하여 데이터를 주고받는다.

'자바' 카테고리의 다른 글

자바 캐시 알고리즘  (0) 2023.07.30
자바 concurrent 패키지  (0) 2023.07.30
자바 Socket  (0) 2023.07.29
자바 Serializeble  (0) 2023.07.29
자바 NIO ( Non-blocking I/O )  (0) 2023.07.28