Java 105(DatagramSocket, DatagramPacket, UDP Network(패킷 전달), 키보드로 메세지(문자열)입력받아 전달하는 서버 프로그램)

Kang.__.Mingu·2024년 5월 24일
0

Java

목록 보기
107/108

DatagramSocket

  • 연결된 컴퓨터에게 패킷을 전달하거나 전달받는 객체를 생성하기 위한 클래스

  • 패킷을 전달하기 위한 컴퓨터에서는 DatagramSocket 클래스의 매개변수가 없는 기본 생성자를 사용하여 DatagramSocket 객체 생성

  • 패킷: 전달할 문자열(메세지)를 byte 배열로 변환하여 저장

DatagramSocket 메소드

  • DatagramSocket.send(DatagramPacket packet)
    • 매개변수에 전달된 DatagramPacket 객체의 정보를 사용하여 패킷을 전달하는 메소드
  • DatagramSocket.receive(DatagramPacket packet)
    • 연결된 컴퓨터에서 보내온 패킷을 매개변수로 전달된 DatagramPacket 객체에 저장하기 위한 메소드
    • DatagramPacket 객체에 저장된 byte 배열에 자동으로 전달된 데이터 저장
    • 연결된 컴퓨터에서 보내온 패킷이 없는 경우 스레드는 일시 중지

DatagramPacket

  • 연결된 컴퓨터에게 패킷을 전달하거나 전달받는 객체를 생성하기 위한 클래스
    • 패킷을 전달하기 위한 컴퓨터에서는 DatagramPacket 클래스의 DatagramPacket(byte[] data, int length, InetAddress address, int port) 생성자를 사용하여 DatagramPacket 객체 생성

MessageReceiveApp

  • UDP 네트워크 프로그램: DatagramSocket 클래스와 DatagramPacket 클래스를 사용하여 작성
  • 데이터(패킷)를 보내는 컴퓨터와 데이터(패킷)를 받는 컴퓨터로 구분하여 처리
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

// 다른 컴퓨터에서 보내온 문자열(메세지)를 제공받아 출력하는 프로그램 작성
public class MessageReceiveApp {
    public static void main(String[] args) throws IOException {
        // 패킷을 전달하기 위한 컴퓨터에서는 DatagramSocket 클래스의 DatagramSocket(int port)
        // 사용하여 DatagramSocket 객체 생성 - 패킷을 받기 위한 포트 활성화
        DatagramSocket datagramSocket = new DatagramSocket(4000);

        // 전달받은 패킷의 데이터를 저장하기 위한 Byte 배열 생성
        byte[] data = new byte[1024]; // 1KB

        // 패킷을 전달받기 위한 컴퓨터에서는 패킷을 저장된 객체를 생성하기 위해 DatagramPacket 클래스의
        // DatagramPacket(byte[] data, int length) 생성자로 DatagramPacket 객체 생성
        DatagramPacket datagramPacket = new DatagramPacket(data, data.length);

        // DatagramSocket.receive(DatagramPacket packet): 연결된 컴퓨터에서 보내온 패킷을 매개변수로 전달된
        // DatagramPacket 객체에 저장하기 위한 메소드
        // => DatagramPacket 객체에 저장된 byte 배열에 자동으로 전달된 데이터 저장
        // => 연결된 컴퓨터에서 보내온 패킷이 없는 경우 스레드는 일시 중지
        datagramSocket.receive(datagramPacket);

        // 매개변수로 byte[] 배열을 전달받아 문자열로 저장
        String message = new String(data);

        System.out.println("[결과] 보내온 메세지 = " + message);
        datagramSocket.close();
    }
}

MessageSendApp

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

// 키보드로 문자열(메세지)을 입력받아 다른 컴퓨터에게 전달하는 UDP 네트워크 프로그램 작성
public class MessageSendApp {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("전달 메세지 입력 >> ");
        String message = in.readLine();

        // DatagramSocket 클래스: 연결된 컴퓨터에게 패킷을 전달하거나 전달받는 객체를 생성하기 위한 클래스
        // => 패킷을 전달하기 위한 컴퓨터에서는 DatagramSocket 클래스의 매개변수가 없는 기본 생성자를
        // 사용하여 DatagramSocket 객체 생성
        DatagramSocket datagramSocket = new DatagramSocket();

        // 연결될 컴퓨터의 네트워크 식별자가 저장된 InetAddress 객체를 반환받아 저장
        InetAddress inetAddress = InetAddress.getByName("192.168.13.31");

        // 전달할 문자열(메세지)를 byte 배열로 변환하여 저장
        byte[] data = message.getBytes();

        // DatagramPacket 클래스: 연결된 컴퓨터에게 패킷을 전달하거나 전달받는 객체를 생성하기 위한 클래스
        // => 패킷을 전달하기 위한 컴퓨터에서는 DatagramPacket 클래스의 DatagramPacket(byte[] data
        //, int length, InetAddress address, int port) 생성자를 사용하여 DatagramPacket 객체 생성

        DatagramPacket datagramPacket = new DatagramPacket(data, data.length, inetAddress, 4000);

        // DatagramSocket.send(DatagramPacket packet): 매개변수에 전달된 DatagramPacket 객체의 정보를 사용하여
        // 패킷을 전달하는 메소드
        datagramSocket.send(datagramPacket);

        // DatagramSocket.close(): DatagramSocket 객체를 제거하는 메소드
        datagramSocket.close();

        System.out.println("[메세지] 연결된 컴퓨터에게 메세지를 보냈습니다.");
    }
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글