[책펌] UDP 소켓 프로그램 예제

By | 10월 21, 2008

* 참고
- DatagramPacket : 애플리케이션에서 주고받을 데이터와 관련된 클래스 (생성자로 송신/수신기능 구분)
- DatagramSocket : 실제 데이터의 전송을 책임지는 클래스

UDPEchoServer.java

package socket.echo.udp;

import java.net.*;
import java.io.*;

public class UDPEchoServer {

//생성자
 public UDPEchoServer(int port){
  
  try{
//port를 소스로 해서 DatagramSocket 객체를 생성한다. 
   DatagramSocket ds = new DatagramSocket(port);
   
   while(true){
    
//UDP의 실제 데이터는 일반적으로 512바이트로 제한하는 경우가 많기 때문에 바이트 배열을 크기를 512로 했다.
    byte[] buffer = new byte[512];
//DatagramPacket의 생성자 중 데이터수신을 위한 생성자. 바이트배열 buffer의 길이만큼 저장한다.
    DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
    System.out.println("ready");
//DatagramSocket객체로 수신된 Datagram을 dp에 저장한다.
    ds.receive(dp);
//Datagram의 실제 데이터를 문자열로 변환한다.
    String str = new String(dp.getData());
    System.out.println("수신된 데이터 : "+str);
    

//송신을 위한 Datagram의 ip주소를 InetAddress 객체로 반환한다.
    InetAddress ia = dp.getAddress();
//송신을 위한 Datagram의 포트번호를 반환한다.
    port = dp.getPort();
    System.out.println("client ip : "+ia+", client port : "+port);
//송신을 위한 DatagramPacket 객체를 생성한다. 이 때 IP주소와 포트번호는 수신된 Datagram의 IP주소와 포트로 해야 한다. (이 예제에서는 송신처로 그대로 보내므로 아래와 같은 형태가 된다.)
    dp = new DatagramPacket(dp.getData(), dp.getData().length, ia, port);
    ds.send(dp);
   }
   
  }catch(IOException e){
   e.printStackTrace();
  }
 }

 public static void main(String[] args){
  new UDPEchoServer(3000);
 }
 
}

UDPEchoClient.java

package socket.echo.udp;

import java.net.*;
import java.io.*;

public class UDPEchoClient {

 private String str;
 private BufferedReader file;
 private static int SERVERPORT = 3000;
 
 public UDPEchoClient(String ip, int port){
  
  try{
//InetAddress 객체를 생성한다. 여기서는 송신할 원격지가 같기 때문에 localhost로 설정했지만, 송신할 원격지가 다르다면 원격지의 IP주소로 설정해야 한다.
   InetAddress ia = InetAddress.getByName(ip);
//port를 인자로 DatagramSocket객체를 생성한다.
   DatagramSocket ds = new DatagramSocket(port);
   System.out.println("message : ");
   file = new BufferedReader(new InputStreamReader(System.in));   //키보드로부터
   str = file.readLine();
//입력받은 문자열을 바이트배열로 바꾸어 저장한다.
   byte[] buffer = str.getBytes();   
//송신을 위한 DatagramPacket 객체를 생성한다. 이 때 IP주소와 포트번호는 송신할 원격지의 IP주소와 포트로 해야 한다.
   DatagramPacket dp = new DatagramPacket(buffer, buffer.length, ia, SERVERPORT);
//DatagramSocket 객체로 송신을 위한 Datagram을 전송한다.

   ds.send(dp);

   buffer = new byte[512];
//수신을 위한 DatagramPacket 객체를 생성한다.
   dp = new DatagramPacket(buffer, buffer.length);
//DatagramSocket 객체로 수신된 Datagram을 dp에 저장한다.
   ds.receive(dp);

   System.out.println("server ip : "+dp.getAddress()+", server port : "+dp.getPort());
   System.out.println("수신된 데이터 : "+new String(dp.getData()).trim());
   
   
  }catch(IOException ioe){
   ioe.printStackTrace();
  }
 }

 public static void main(String[] args){
  new UDPEchoClient("localhost", 2000);
 }
 
}

- 출처 : [한빛미디어] 자바 5.0 프로그래밍 -

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments