: 우편시스템과 유사(항상 연결되어 있지 않아도 무방)
: DatagramSocket - 우체국(사서함)
: DatagramPacket - 우편물 규격봉투, 받는 용, 보내는 용이 각각 필요
: DatagramPacket(byte[] recvBuf, int readLength) : 받는 규격 봉투
: DatagramPacket(byte[] sendBuf, int sendLength, InetAddress iaddr, int iport) : 보내는 규격 봉투
: DatagramSocket() : localhost(127.0.0.1), 사용 가능한 port이용하여 Socket 설정
: DatagramSocket(int port) : localhost(127.0.0.1), 지정한 port이용
: DatagramSocket(int port, InetAddress iaddr) : 지정한 IP Address(InetAddress객체)와 port# 이용
- UdpServerTest.java 소스
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UdpServerTest {
public static void main(String[] args) {
try {
// udp로 데이터를 받기위한 서버
DatagramSocket ds = new DatagramSocket(8000);
while(true){
// 데이터가 저장되는 byte[]에 데이터가 저장
byte buf [] = new byte[256];
// 데이터그램 패킷클래스를 만들어줌
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// DatagramSocket을 이용하여 클라이언트로부터 넘어온 DatagramPacket을 받아줌
ds.receive(dp);
// 받은 데이터를 스트링으로 바꾸어줌
String data = new String(dp.getData()); // 바이트 타입의 배열을 받아서 String으로 바꿈
System.out.println("클라이언트로부터 받은 파일은 : " + data);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
- UdpClientTest.java 소스
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class UdpClientTest {
public static void main(String[] args) {
try {
// udp로 데이터를 받기위한 서버
DatagramSocket ds = new DatagramSocket(); // 여기서는 포트번호 필요 없음
// inetaddress 클래스를 이용하여 해당 서버 IP를 등록하는 객체 선언
InetAddress address = InetAddress.getByName("203.233.196.185");
Scanner sc = new Scanner(System.in);
while(true){
// 데이터 입력
System.out.print("보낼 메시지를 작성하시오 : ");
// 키보드로부터 데이터를 받음
String data = sc.nextLine();
if(data.equals("1"))
break;
// 데이터가 저장되는 byte[]에 데이터가 저장
// String 데이터를 byte[]로 바꿈
byte buf [] = data.getBytes();
// 데이터그램 패킷클래스를 만들어줌
DatagramPacket dp = new DatagramPacket(buf, buf.length, address, 8000);
// 서버측으로 전송
ds.send(dp);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
- Client 실행
- 결과