2013년 7월 2일 화요일

(130702) 7일차 UdpServerTest.java, UdpClientTest.java (UDP Server & Client 테스트)

 - UDP (User Datagram Protocol)
 : 우편시스템과 유사(항상 연결되어 있지 않아도 무방)
 : 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 실행













 - 결과