연결된 컴퓨터에게 패킷을 전달하거나 전달받는 객체를 생성하기 위한 클래스
패킷을 전달하기 위한 컴퓨터에서는 DatagramSocket 클래스의 매개변수가 없는 기본 생성자를 사용하여 DatagramSocket 객체 생성
패킷: 전달할 문자열(메세지)를 byte 배열로 변환하여 저장
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();
}
}
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("[메세지] 연결된 컴퓨터에게 메세지를 보냈습니다.");
}
}