04 UDP

프로그래밍/Java 2007. 11. 27. 13:49 Posted by galad


/******************************************************************************
*   파일      : UDPTimeClient.java
*   용도      : UDP Client
*   작성자   : 성홍제
*   작성일   : 2006. 08. 10
*   Version : 1.0
******************************************************************************/

package Client;

import java.net.*;  
   
public class UDPTimeClient
{  
    public static void main(String[] args)
    {  
        /*if(args.length != 2)
        {
            System.out.println("사용법 : java UDPEchoClient ip port");
            System.exit(1);
        }
       
        String ip = args[0];
        int port = 0;
       
        try
        {
            port = Integer.parseInt(args[1]);
        }
        catch(Exception ex)
        {
            System.out.println("port 번호는 양의 정수로 입력하여 주세요.");
            System.exit(1);
        }*/
       
        String ip = "61.109.232.157";   
        int port = 9999;
       
        InetAddress inetaddr = null;
       
        try
        {  
            inetaddr = InetAddress.getByName(ip);
        }
        catch (UnknownHostException e)
        {  
            System.out.println("잘못된 도메인이나 ip입니다.");
            System.exit(1);
        }
       
        DatagramSocket dsock = null;
       
        try
        {
            // 클라이언트의 데이터그램소켓은 패킷에 서버의 주소와 포트를 넣어주므로

            // 생성자에 아무런 인자가 필요없다.
            dsock = new DatagramSocket();
            String line = null;
           
            // 전송
            // 일단 아무런 내용도 없는 패킷을 보내서

            // 서버가 클라이언트의 위치를 알 수 있게 해준다.
            DatagramPacket sendPacket = new DatagramPacket("".getBytes(),
                                                                                    "".getBytes().length,
                                                                                    inetaddr,
                                                                                    port);
            dsock.send(sendPacket);
             
            byte[] buffer = new byte[200];
            DatagramPacket receivePacket = new DatagramPacket(buffer, buffer.length);
            dsock.receive(receivePacket);
           
            // 받은 결과 출력.
            String msg = new String(receivePacket.getData(),
                                                0,
                                                receivePacket.getData().
                                                length);
           
            System.out.println("서버로 부터 전달받은 시간 :" + msg.trim());
        }
        catch(Exception ex)
        {  
            System.out.println(ex);
        }
        finally
        {  
            if(dsock != null)
            dsock.close();
        }  
    } // main  
} // class




/******************************************************************************
*   파일      : UDPTimeServer.java
*   용도      : UDP Server
*   작성자   : 성홍제
*   작성일   : 2006. 08. 10
*   Version : 1.0
******************************************************************************/

package Server;

import java.net.*;  
import java.util.*;  
   
   
public class UDPTimeServer
{  
    public static void main(String[] args)
    {  
        /*if(args.length != 1)
        {
            System.out.println("사용법 : java UDPEchoServer port");
            System.exit(1);
        }
       
        int port = 0;
       
        try
        {
            port = Integer.parseInt(args[0]);
        }
        catch(Exception ex)
        {
            System.out.println("port 번호는 양의 정수로 입력하여 주세요.");
            System.exit(1);  
        }*/
       
        int port = 9999;
       
        DatagramSocket dsock = null;
       
        try
        {  
            System.out.println("접속 대기상태입니다.");
           
            dsock = new DatagramSocket(port);  
            String line = null;  
           
            while(true)
            {  
             // 받기
                byte[] buffer = new byte[1024];
               
                // TCP와는 다르게 소켓으로 계속 연결되어있는 것이 아니므로
                // 일단 클라이언트의 정보를 얻기 위해서 먼저 받아야 한다.
                DatagramPacket receivePacket = new DatagramPacket(buffer, buffer.length);
                dsock.receive(receivePacket);
               
                java.text.SimpleDateFormat format

                     = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
                String sdate = format.format(new Date());
               
                System.out.println(receivePacket.getAddress().getHostAddress()

                                           + " 에 현재시간 " + sdate + " 을 전송합니다.");

                // 비연결성이므로 보내는 데이터마다 주소와 포트가 필요하다.
                // 위에서 먼저 받은 패킷을 이용해서 클라이언트의 주소와 포트 번호를 알아낸다.
                DatagramPacket sendPacket = new DatagramPacket(sdate.getBytes(),
                                                                                        sdate.getBytes().length,
                                                                                        receivePacket.getAddress(),
                                                                                        receivePacket.getPort());
               
                // getBytes() - 스트링을 바이트 배열로 바꾸어준다. 스트림으로 전송하기 위해서는
                // 바이트 단위로 바꿀 필요가 있다.
               
                dsock.send(sendPacket);
            } // while  
        }
        catch(Exception ex)
        {  
            System.out.println(ex);  
        }
        finally
        {  
            if(dsock != null)  
                dsock.close();
        }  
    } // main    
} // class




/******************************************************************************
*   파일      : RadioClient.java
*   용도      : UDP 라디오 클라이언트
*   작성자   : 성홍제
*   작성일   : 2006. 08. 10
*   Version : 1.0
******************************************************************************/

package Client;

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

public class RadioClient
{
    final static int MAXBUFFER = 80;
   
    public static void main(String[] args)
    {
        /*if (args.length != 1)
         * {
        System.out.println("사용법: java RadioClient port");
        System.exit(0);
        }*/
         
        byte buffer[] = new byte[MAXBUFFER];
        //int port = Integer.parseInt(args[0]);
        int port = 163;
       
        try
        {
            DatagramSocket socket = new DatagramSocket(port);
            DatagramPacket recv_packet;// 수신용 데이터그램 패킷
           
            while (true)
            {
                recv_packet = new DatagramPacket (buffer, buffer.length);
                socket.receive (recv_packet);
                // 화면 출력
                String result = new String(buffer, 0, recv_packet.getLength());
                System.out.println(port + "방송: " + result);
            }
        }
        catch(IOException e)
        {
            System.out.println(e);
        }
    }
}




/******************************************************************************
*   파일      : RadioClient.java
*   용도      : UDP 라디오 클라이언트
*   작성자   : 성홍제
*   작성일   : 2006. 08. 10
*   Version : 1.0
******************************************************************************/
package Server;

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

public class RadioServer
{
    final int MAXBUFFER = 512;
   
    void work()
    {
        byte buffer[] = null;
       
        String[] str = {"배고파~배고파~배고파~배고파~배고파~배고파~배고파~배고파~배고파~배고파~배고파~",
          "졸려~~~~~~~~~~~졸려~~~~~~~~~~~졸려~~~~~~~~~~~",
          "피곤해~~~~~~~~~피곤해~~~~~~~~~피곤해~~~~~~~~~피곤해~~~~~~~~~",
          "휴가 좀 보내주~~~~~~~~~~휴가 좀 보내주~~~~~~~~~~휴가 좀 보내주~~~~~~~~~~",
          "뭐냐? 이건",
          "잠 잘거야?",
          "하고 싶당!"
        };
       
        String[] dest = {"128","130","131",
          "132",
          "133",
          "134",
          "135",
          "136",
          "137",
          "138",
          "139",
          "140",
          "141",
          "142",
          "143",
          "144",
          "145",
          "146",
          "147",
          "148",
          "149",
          "150",
          "151",
          "152",
          "153",
          "154",
          "155",
          "156",
          "157",
          "158",
          "159",
          "160",
          "161",
          "162",
          "163",
          "164",
          "165",
          "166"};
       
        //String[] dest = {"100", "12"};
        try
        {
            DatagramSocket socket = new DatagramSocket();
            DatagramPacket send_packet = null;
            int i=0;
           
            while(true)
            {
                buffer = str[i++].getBytes();
                for (int j=0; j<dest.length; j++)
                {
                    //send_packet = new DatagramPacket(buffer, 

                    //      buffer.length,InetAddress.getByName("70.12.112."+dest[j]), 163);
                    send_packet = new DatagramPacket(buffer,
                                                buffer.length,InetAddress.getByName("61.109.232."

                                                                                                      +dest[j]),163);
                    socket.send (send_packet);
                }
               
                Thread.sleep(1000);
               
                if (i>=str.length)
                    i=0;
            }
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
     
    public static void main (String[] args)
    {
        new RadioServer().work();
    }
}

'프로그래밍 > Java' 카테고리의 다른 글

HttpURLConnection 사용례  (0) 2009.01.06
[펌] HttpURLConnection 을 이용하세요  (0) 2009.01.02
03 졸려....  (0) 2007.11.27
02 2일째....  (0) 2007.11.27
01 Network 첫시간...  (0) 2007.11.27