03 졸려....

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


/******************************************************************************
*   파일      : MyFileServer.java
*   용도      : 파일 전송 서버
*   작성자   : 성홍제
*   작성일   : 2006. 08. 08
*   Version : 1.0
******************************************************************************/

package Server;

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

public class MyFileServer
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        ServerSocket ss = null;
        Socket socket = null;
       
        //BufferedReader br = null; // 이건 문자로만 취급하므로 텍스트 파일만 취급 가능
        //PrintWriter pw = null;
       
        // 파일에서 읽어서 네트워크에 쓴다. 이건 1바이트 단위로 취급하므로

        // 어떤 파일이든 취급 가능하다.
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
       
        try
        {
           ss = new ServerSocket(10002);
          
           while(true)
           {
               System.out.println("클라이언트의 접속을 기다립니다.");
               socket = ss.accept();
              
               // 접속하면 접속한 클라이언트의 IP 출력
               InetAddress address = socket.getInetAddress();
               System.out.println(address.getHostAddress() + " 로부터 접속하였습니다.");
              
               //br = new BufferedReader(new )
               bis = new BufferedInputStream(new FileInputStream("d:\\Test1.txt"));
               bos = new BufferedOutputStream(socket.getOutputStream());
              
               int b = 0;
              
               while((b = bis.read()) != -1)
               {
                   try
                   {
                       bos.write(b);
                       bos.flush();
                   }
                   catch(Exception e)
                   {
                       System.out.println("파일을 클라이언트에 보내던 중에 예외 발생");
                       e.printStackTrace();
                   }
               }
                   
               System.out.println("전송을 완료했습니다.");
              
               // 전송 완료하고, 그 클라이언트와의 연결을 끊은 후,

               // 다른 클라이언트의 접속을 기다린다.
               bos.close();
               socket.close();
           }
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            try
            {
                bis.close();
                ss.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }

}




/******************************************************************************
*   파일      : MyFileClient.java
*   용도      : 파일 전송 클라이언트
*   작성자   : 성홍제
*   작성일   : 2006. 08. 08
*   Version : 1.0
******************************************************************************/

package Client;

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

public class MyFlieClient
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        Socket socket = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
       
        try
        {
            socket = new Socket("localhost", 10002);
           
            bis = new BufferedInputStream(socket.getInputStream());
            bos = new BufferedOutputStream(new FileOutputStream("d:\\Test2.txt"));
           
            int b = 0;
           
            while((b = bis.read()) != -1)
            {
                bos.write(b);
                bos.flush();
            }           
            System.out.println("파일을 다운로드 하였습니다.");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                bos.close();
                bis.close();
                socket.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }

}



/******************************************************************************
*   파일      : MyFileServer.java
*   용도      : 파일 전송 서버 - 쓰레드로 바꾼 것
*   작성자   : 성홍제
*   작성일   : 2006. 08. 08
*   Version : 1.0
******************************************************************************/

package Server;

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

public class MyFileServer
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        ServerSocket ss = null;
        Socket socket = null;
       
        //BufferedReader br = null; // 이건 문자로만 취급하므로 텍스트 파일만 취급 가능
        //PrintWriter pw = null;
       
        // 파일에서 읽어서 네트워크에 쓴다. 이건 1바이트 단위로 취급하므로

        // 어떤 파일이든 취급 가능하다.
        BufferedInputStream bis = null;
       
        try
        {
           // 처음에 한번만 생성해서 사용한다.
           ss = new ServerSocket(10002);
           bis = new BufferedInputStream(new FileInputStream("d:\\Test1.txt"));
          
           while(true)
           {
               System.out.println("클라이언트의 접속을 기다립니다.");
               socket = ss.accept();
              
               // 접속하면 접속한 클라이언트의 IP 출력
               InetAddress address = socket.getInetAddress();
               System.out.println(address.getHostAddress() + " 로부터 접속하였습니다.");
       
               MyFileServerThread mfst = new MyFileServerThread(bis, socket);
               mfst.start();
           }
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            try
            {
                bis.close();
                ss.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
}

class MyFileServerThread extends Thread
{
    /// Fields
    private Socket socket = null;
    private BufferedInputStream bis = null;
    private BufferedOutputStream bos = null;
   
    /// Constructor
    MyFileServerThread(BufferedInputStream bis, Socket soc)
    {
        this.socket = soc;
        this.bis = bis;
       
        try
        {
            bos = new BufferedOutputStream(this.socket.getOutputStream());
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            System.out.println("출력 스트림 생성 시 예외 발생");
            e.printStackTrace();
        }
    }
   
    /// Methods
    public void run()
    {
        int b = 0;
       
        while(true)
        {
            try
            {
                b = bis.read();
            }
            catch (IOException e1)
            {
                System.out.println("파일을 읽던 중에 예외 발생");
                e1.printStackTrace();
            }
           
            if(b == -1)
                break;
           
            try
            {
                bos.write(b);
                bos.flush();
            }
            catch(Exception e)
            {
                System.out.println("파일을 클라이언트에 보내던 중에 예외 발생");
                e.printStackTrace();
            }
        }
            
        System.out.println("전송을 완료했습니다.");
       
        // 전송 완료하고, 그 클라이언트와의 연결을 끊은 후, 다른 클라이언트의 접속을 기다린다.
        try
        {
            // bis는 서버에서 계속 사용하므로 쓰레드에서 닫으면 안된다.
            bos.close();
            socket.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
   
    /// Main
}



/******************************************************************************
*   파일      : MyFileClient.java
*   용도      : 파일 전송 클라이언트
*   작성자   : 성홍제
*   작성일   : 2006. 08. 08
*   Version : 1.0
******************************************************************************/

package Client;

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

public class MyFlieClient
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        Socket socket = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
       
        try
        {
            socket = new Socket("localhost", 10002);
           
            bis = new BufferedInputStream(socket.getInputStream());
            bos = new BufferedOutputStream(new FileOutputStream("d:\\Test2.txt"));
           
            int b = 0;
           
            while((b = bis.read()) != -1)
            {
                bos.write(b);
                bos.flush();
            }           
            System.out.println("파일을 다운로드 하였습니다.");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                bos.close();
                bis.close();
                socket.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }

}



/******************************************************************************
*   파일      : SimpleWebServer.java
*   용도      : 웹 서버 - 간단한 웹 서버 기능을 한다. 익스플로러에서 http://localhost:8081/파일명 *                 이런 식으로
*                 요청하면 웹 서버 폴더에 있는 파일을 보여준다.
*   작성자   : 성홍제
*   작성일   : 2006. 08. 08
*   Version : 1.0
******************************************************************************/

package Server;

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

public class SimpleWebServer
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        Socket socket = null;
        BufferedReader br = null;
        BufferedReader fin = null;
        PrintWriter pw = null;
       
        try
        {
            ServerSocket ss = new ServerSocket(8081);
           
            while(true)
            {
                System.out.println("클라이언트의 접속을 기다립니다.");
                socket = ss.accept();
                System.out.println("클라이언트가 접속했습니다.");
               
                br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
               
                String line = "";
               
                try
                {
                    line = br.readLine();
                   
                    // HTTP 프로토콜에 정해진 대로 첫줄에 사용자가 요청한 파일명이 들어가있으므로
                    // 첫 줄을 읽어서, 사용자가 요청한 파일명을 얻어온다.
                    // indexOf(" ") - " "가 시작되는 인덱스를 리턴한다.
                    int start = line.indexOf(" ") + 2;
                    int end = line.lastIndexOf("HTTP") - 1;
                   
                    String filename = line.substring(start, end);
                   
                    System.out.println("클라이언트가 " + filename + "을 요청했습니다.");
                   
                    fin = new BufferedReader(new FileReader(filename));
                    pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
                   
                    String fline = null;
                   
                    while((fline = fin.readLine()) != null)
                    {
                        //System.out.println(fline);
                       
                        pw.println(fline);
                        pw.flush();
                    }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
                finally
                {
                    if(fin != null)
                        fin.close();
                   
                    if(pw != null)
                        pw.close();
                   
                    if(br != null)
                        br.close();
                   
                    if(socket != null)
                        socket.close();
                }
               
            }//while(true)
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }//public static void main(String[] args)

}

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

[펌] HttpURLConnection 을 이용하세요  (0) 2009.01.02
04 UDP  (0) 2007.11.27
02 2일째....  (0) 2007.11.27
01 Network 첫시간...  (0) 2007.11.27
05 문자 단위 입출력  (0) 2007.11.27