--------------------------------------------------------------------------------------------
UdpServer.java
--------------------------------------------------------------------------------------------
import java.io.*;
import java.net.*;
import java.util.*;
 
public class UdpServer {
    // 파일을 읽어 단어들을 어레이리스트에 담아 반환 한다.
    public static ArrayList readFile() throws IOException {
        ArrayList wordList = new ArrayList();
        BufferedReader fin = new BufferedReader(new FileReader("hello.txt"));
        StringTokenizer st = new StringTokenizer(fin.readLine());
 
        while(st.hasMoreTokens()) {
            wordList.add(st.nextToken());
        }
 
        return wordList;
    }
 
    public static void main (String[] args) {
        DatagramSocket socket = null; // UDP소켓
        DatagramPacket out = null;    // UDP패킷 전송 객체
        DatagramPacket in = null;     // UDP패킷 수신 객체
        byte packetBuf[] = new byte[1024]; // 패킷 버퍼
 
        if (args.length != 1) {
            System.out.println("사용법: java UdpServer port");
            System.exit(0);
        }
        
        try{
            // UDP 소켓을 생성해 지정된 포트에 바인딩 한다.
            socket = new DatagramSocket(Integer.parseInt(args[0])); 
            
            // 무한 루프를 돌려 UDP패킷을 수신 받는다.
            while(true) {
                // UDP패킷을 생성해 수신을 받는다.
                in = new DatagramPacket(packetBuf, 1024);
                socket.receive(in);
                
                // 수신지의 포트를 설정 한다.
                int port = in.getPort();
                
                // 수신지의 주소를 설정 한다.
                InetAddress inet = in.getAddress();
                
                // 읽어온 단어들을 이터레이터로 변환 한다. 
                Iterator iterator = readFile().iterator();
                
                // 단어들을 읽어 들이기 위한 루프를 돌린다.
                while(iterator.hasNext()) {
                    String word = (String)iterator.next();
                    
                    // 단어들을 전송하기 위한 UDP패킷을 생성한다.
                    out = new DatagramPacket(word.getBytes(), word.length(), inet, port);
                    
                    // 전송한다.
                    socket.send(out);
                    
                    // 전송한 단어와 수신지의 주소를 출력한다.
                    System.out.println("send: word=" + word + " " +
                        "dest=" + inet.getHostAddress());
                }
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
 
--------------------------------------------------------------------------------------------
UdpClient.java
--------------------------------------------------------------------------------------------
import java.net.*;
import java.io.*;
 
public class UdpClient {
    public static void main(String[] args) {
        DatagramSocket socket = null; // UDP 소켓
        DatagramPacket out = null;       // UDP 패킷 전송 객체
        DatagramPacket in = null;          // UDP 패킷 수신 객체
        InetAddress serverInet = null; // 서버 주소 객체
        byte[] packetBuf = new byte[1024]; // 패킷 버퍼
        String word = null; // 단어
 
        if(args.length != 2) {
            System.out.println("사용법: java MyEcho hostname port(7)");
            System.exit(0);
        }
 
        String host = args[0];
        int port = Integer.parseInt(aegs[1]);
 
        try{
            // UDP 소켓 생성
            socket = new DatagramSocket();
            
            // 서버 주소 객체 생성
            serverInet = InetAddress.getByName(host);
            
            // UDP 패킷 전송 객체 생성
            out = new DatagramPacket(packetBuf, 2, serverInet, port);
            
            // UDP 패킷 수신 객체 생성
            in = new DatagramPacket(packetBuf, 1024);
            
            // UDP 공 패킷을 지정한 호스트로 전송한다.
            socket.send(out);
            
            // 패킷을 받기 위해 루프를 돌린다.
            while(true) {
                // 패킷을 받는다.
                socket.receive(in);
                
                // 받아온 패킷을 문자열로 변환 한다. 만약 수신된 데이터가 없다면 루프를 종료 한다.
                if((word = new String(in.getData(), 0, in.getLength())) == null) break;
                // 수신된 단어를 출력한다.
                System.out.println("recv: " + word); 
            }
            
            // 소켓 닫기
            socket.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}