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());
}
}
}