No Description

FileReceiveServerTCP.java 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package kr.co.swh.lecture.network.filetrans;
  2. import java.io.BufferedOutputStream;
  3. import java.io.DataInputStream;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9. /**
  10. * <pre>
  11. * kr.co.swh.lecture.network.filetrans
  12. * FileReceiveServer.java
  13. *
  14. * 설명 :파일 전송 서버
  15. * </pre>
  16. *
  17. * @since : 2018. 12. 28.
  18. * @author : tobby48
  19. * @version : v1.0
  20. */
  21. public class FileReceiveServerTCP {
  22. public static void main(String[] args) {
  23. ServerSocket serverSocket = null;
  24. Socket socket = null;
  25. String filename = "C:\\Users\\tobby48\\receive-data.txt";
  26. try {
  27. // 리스너 소켓 생성 후 대기
  28. serverSocket = new ServerSocket(8081); // socket(),bind();
  29. // 연결되면 통신용 소켓 생성
  30. socket = serverSocket.accept(); // listen(),accept();
  31. long start = System.currentTimeMillis();
  32. // 파일 수신 작업 시작
  33. FileReceiver fr = new FileReceiver(socket,filename,start);
  34. fr.start();
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. }
  40. class FileReceiver extends Thread {
  41. Socket socket;
  42. DataInputStream dis;
  43. FileOutputStream fos;
  44. BufferedOutputStream bos;
  45. String filename;
  46. long start;
  47. int control = 0;
  48. public FileReceiver(Socket socket,String filestr,long starttime) {
  49. this.socket = socket;
  50. this.filename = filestr;
  51. this.start = starttime;
  52. }
  53. @Override
  54. public void run() {
  55. try {
  56. dis = new DataInputStream(socket.getInputStream());
  57. String fName = filename;
  58. // 파일을 생성하고 파일에 대한 출력 스트림 생성
  59. File f = new File(fName);
  60. fos = new FileOutputStream(f);
  61. bos = new BufferedOutputStream(fos);
  62. // 바이트 데이터를 전송받으면서 기록
  63. int len;
  64. int size = 4096;
  65. byte[] data = new byte[size];
  66. while ((len = dis.read(data)) != -1) {
  67. control++;
  68. if(control % 10000 == 0)
  69. {
  70. System.out.println("수신중..." + control/10000);
  71. }
  72. bos.write(data, 0, len);
  73. }
  74. long end = System.currentTimeMillis();
  75. System.out.println( "Elapsed Time (seconds) : " + ( end - start )/1000.0 );
  76. bos.flush();
  77. bos.close();
  78. fos.close();
  79. dis.close();
  80. } catch (IOException e) {
  81. e.printStackTrace();
  82. }
  83. }
  84. }