JAVA

Network - 파일전송 ( Ⅳ )

choi121xx 2014. 9. 12. 15:13

 

- 서버를 실행하고 
- 클라이언트에서 파일이름을 입력하면 해당 폴더로 파일이 전송

1. server

MyServer01.java
package test03.file;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServer01{
    public static void main(String[] args) {
        ServerSocket server=null;
        try{
            server=new ServerSocket(3000);
            System.out.println("클라이언트 접속대기중...");
            Socket sock=server.accept();
            System.out.println("클라이언트가 접속 했습니다.");
            //클라이언트가 보내온 데이터를 읽어오기위한 스트림객체 생성
            DataInputStream dis=new DataInputStream(sock.getInputStream());
            //제일먼저 보내온 파일명 읽어오기
            String fileName=dis.readUTF();
            //전송된 파일명으로 파일생성하기
            FileOutputStream fos=new FileOutputStream("c:\\down\\" + fileName);
            byte[] b=new byte[1024];
            int n=0;
            long fileSize=0;
            while((n=dis.read(b))!=-1){//전송된 데이터 읽어와 b배열에 저장
                //b배열의 데이터를 파일로 저장
                fos.write(b,0,n);
                fileSize+=n;//전송된 파일크기 구하기
            }
            //스트림닫기
            fos.close();
            dis.close();
            //소켓닫기
            sock.close();
            server.close();
            System.out.println("c:\\down폴더에" + fileSize +
                    "bytes크기의 파일수신 완료!");
        }catch(IOException ie){
            System.out.println(ie.getMessage());
        }
    }
}
 



2. client
MyClient01.java

192.168.0.2 --> 해당 서버의 주소. 로컬 pc에서 테스트할 경우 pc ip넣기.
package test03.file;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class MyClient01{
    public static void main(String[] args){
        try{
            Socket sock=new Socket("192.168.0.2",3000);
            System.out.println("서버접속성공!");

            Scanner scan=new Scanner(System.in);
            System.out.println("전송할 파일명 입력");

            String fileName=scan.next();
            File f=new File(fileName);

            //데이터를 전송하기 위한 스트림객체 생성하기
            DataOutputStream dos=new DataOutputStream(sock.getOutputStream());

            //제일먼저 파일명 보내기
            dos.writeUTF(f.getName());
            dos.flush();
            byte b[]=new byte[1024];
            int n=0;

            //파일에서 읽어오기 위한 스트림객체 생성
            FileInputStream fis=new FileInputStream(fileName);
            long fileSize=0;

            while((n=fis.read(b))!=-1){//파일에서 읽어와 b에 저장
                dos.write(b,0,n);//서버에 파일에서읽어온 데이터 보내기
                fileSize+=n;//파일크기 구하기
            }
            dos.close();//스트림닫기
            fis.close();//스트림닫기
            System.out.println(fileSize+"bytes 크기의 파일전송 완료!");
            sock.close();//소켓닫기
        }catch(UnknownHostException ue){
            System.out.println(ue.getMessage());
        }catch(IOException ie){
            System.out.println(ie.getMessage());
        }
    }
}