반응형
01. UDP 프로토콜 프로그램
- 실제 서버와 클라이언트의 개념은 따로 없음
- 단지, 컴퓨터 간의 정보를 주고받는 (주는 컴퓨터와 받는 컴퓨터만 존재)
- DatagramSocket 클래스(연결시켜주는 클래스)와 DatagramPacket 클래스(보내거나 받는 클래스)를 이용하여 작성
- 정보를 전달하는 컴퓨터와 정보를 얻어오는 컴퓨터로 구분하여 처리
- 빠르게 보낼 수 있음
- 데이타를 받자마자 바로 값으로 처리 가능
02. 메세지를 계속 보내는 프로그램
- 보내기만함
- 실제 성공적으로 잘 받았는지, 못받았는지 확인 불가능
package xyz.itwill.net;
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 프로그램 : DatagramSocket 클래스와 DatagramPacket 클래스를 이용하여 작성
// => 정보를 전달하는 컴퓨터와 정보를 얻어오는 컴퓨터로 구분하여 처리
//키보드로 메세지를 입력받아 다른 컴퓨터에게 전달하는 UDP 기반의 네트워크 프로그램
public class MessageSendApp {
public static void main(String[] args) throws IOException {
//1.
//키보드 입력스트림(System.in)을 대량의 문자데이타를 입력받을 수 입력스트림으로 확장 (문자InputStreamReader -> 문자열BufferedReader)
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
//TCP는 서버가 클라가 접속할 때까지 기다렸다가 접속하면 전달했지만, UDP는 아님
//2.
System.out.print("전달 메세지 입력 >> ");
String message=in.readLine();
//3.🚗
//DatagramSocket 클래스 : 다른 컴퓨터에 연결하기 위한 정보를 저장한 클래스
DatagramSocket socket=new DatagramSocket();
//DatagramSocket socket = new DatagramSocket(4000); 라고 하면 패킷에 포트번호 생략 가능
//4.
//연결될 컴퓨터의 네트워크 정보를 저장한 InetAddress 객체 생성
InetAddress address=InetAddress.getByName("192.168.13.31");
//5.
//String.getBytes() : String 객체에 저장된 문자열을 byte 배열(원시데이타의 모임)로 변환하는 반환하는 메소드
byte[] data=message.getBytes();//전달값을 원시데이타로 변환
//패킷(다른 컴에게 보낼 저장 전달 단위)단위로 입출력이 가능하므로 패킷에 담을 것임
//6.📦
//DatagramPacket : 연결 컴퓨터에게 보낼 패킷정보를 저장하기 위한 클래스
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
// => DatagramPacket 객체를 생성하기 위한 생성자
// => buf : 전달값(원시데이타), length : 패킷크기, address : 연결 컴퓨터의 네트워크 정보, port : 연결 컴퓨터의 포트번호(보낼 포트번호)
DatagramPacket packet=new DatagramPacket(data, data.length, address, 4000);
//7.🚗
//DatagramSocket.send(DatagramPacket packet) : 패킷을 전달하는 메소드
socket.send(packet);
//9.🚗
//DatagramSocket.close() : DatagramSocket 객체를 제거하는 메소드
socket.close();
System.out.println("[결과]연결 컴퓨터에게 메세지를 보냈습니다.");
}
}
03. 메세지를 계속 받는 프로그램
package xyz.itwill.net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
//다른 컴퓨터에서 보내온 메세지를 얻어와 출력하는 UDP 기반의 네트워크 프로그램
public class MessageReceiveApp {
public static void main(String[] args) throws IOException {
//1. 🚗 야! 4000포트 열었다~ 이리로 보내라~
//DatagramSocket 객체 생성
// => 포트를 활성화하여 다른 컴퓨터에서 보내온 패킷을 받을 수 있는 환경 제공
DatagramSocket socket=new DatagramSocket(4000);
//2.
//전달받은 패킷에 저장된 값(메세지)를 저장하기 위한 byte 배열 선언
byte[] data=new byte[1024]; //1MegaByte = 1024byte (일반적인 크기)
//3.📦 가지고 올 공간만 있으면 돼!
//연결 컴퓨터에서 보내온 패킷을 저장하기 위한 DatagramPacket 객체 생성
// => DatagramPacket(byte[] buf, int length) 생성자 이용
DatagramPacket packet=new DatagramPacket(data, data.length);
//4.
System.out.println("메세지 수신중...");
//5.🚗
//DatagramSocket.receive(DatagramPacket packet) : 연결 컴퓨터에서 보내온 패킷을 얻어와 저장하는 메소드
// => 패킷을 받기 전까지 스레드 일시 중지
socket.receive(packet);
//6.
//byte 배열에 저장된 원시데이타를 문자열로 변환하여 저장
String message=new String(data);
//7.
System.out.println("[결과]메세지 = "+message);
//8.
socket.close();
}
}
반응형
'java > java.net' 카테고리의 다른 글
[java.net] 5. 채팅 서버 프로그램 | 채팅 클라이언트 프로그램 (0) | 2024.07.03 |
---|---|
[java.net] 3. TCP 프로토콜 프로그램 (0) | 2024.07.03 |
[java.net] 2. IPAddress 클래스 | ServerSocket 클래스 (0) | 2024.07.02 |
[java.net] 1. 프로토콜의 구조 (0) | 2024.07.02 |