package kr.co.swh.lecture.network.filetrans; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /** *
 * kr.co.swh.lecture.network.filetrans 
 * FileReceiveServer.java
 *
 * 설명 :파일 전송 서버
 * 
* * @since : 2018. 12. 28. * @author : tobby48 * @version : v1.0 */ public class FileReceiveServerTCP { public static void main(String[] args) { ServerSocket serverSocket = null; Socket socket = null; String filename = "C:\\Users\\tobby48\\receive-data.txt"; try { // 리스너 소켓 생성 후 대기 serverSocket = new ServerSocket(8081); // socket(),bind(); // 연결되면 통신용 소켓 생성 socket = serverSocket.accept(); // listen(),accept(); long start = System.currentTimeMillis(); // 파일 수신 작업 시작 FileReceiver fr = new FileReceiver(socket,filename,start); fr.start(); } catch (IOException e) { e.printStackTrace(); } } } class FileReceiver extends Thread { Socket socket; DataInputStream dis; FileOutputStream fos; BufferedOutputStream bos; String filename; long start; int control = 0; public FileReceiver(Socket socket,String filestr,long starttime) { this.socket = socket; this.filename = filestr; this.start = starttime; } @Override public void run() { try { dis = new DataInputStream(socket.getInputStream()); String fName = filename; // 파일을 생성하고 파일에 대한 출력 스트림 생성 File f = new File(fName); fos = new FileOutputStream(f); bos = new BufferedOutputStream(fos); // 바이트 데이터를 전송받으면서 기록 int len; int size = 4096; byte[] data = new byte[size]; while ((len = dis.read(data)) != -1) { control++; if(control % 10000 == 0) { System.out.println("수신중..." + control/10000); } bos.write(data, 0, len); } long end = System.currentTimeMillis(); System.out.println( "Elapsed Time (seconds) : " + ( end - start )/1000.0 ); bos.flush(); bos.close(); fos.close(); dis.close(); } catch (IOException e) { e.printStackTrace(); } } }