콘솔을 통해 파일조회 및 파일다운로드 기능
ls : 파일리스토 조회
GET 파일명 : 해당파일 다운로드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class FileDownClient { private final static String IP = "127.0.0.1"; private final static int PORT = 12345; FileDownClientReciever fileRecv; public FileDownClient() { try { fileRecv = new FileDownClientReciever(new Socket(IP, PORT)); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void getFile(String fileName) { fileRecv.getFile(fileName); } public void getFileList(String cmd) { fileRecv.getFileList(cmd); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class FileDownClientConsol implements Runnable{ private final String LS = "ls"; private final String GET = "GET"; FileDownClient fileClient; public FileDownClientConsol() { fileClient = new FileDownClient(); } // FileDownClient fileClient = new FileDownClient(); // @Override public void run() { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String readLine; try { while((readLine = br.readLine()) != null) { if(LS.equalsIgnoreCase(readLine)) { fileClient.getFileList(readLine); }else if(readLine.toUpperCase().startsWith(GET)){ System.out.println(readLine); String[] args = readLine.split(" "); getFile(args[1].trim()); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void getFile(String name) { fileClient.getFile(name); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FileDownClientLauncher { public static void main(String[] args) { FileDownClientConsol fileClientConsol = new FileDownClientConsol(); ExecutorService exeService = Executors.newSingleThreadExecutor(); exeService.execute(fileClientConsol); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class FileDownClientReciever { private static final String END = "#END#"; private static final int BUF_SIZE = 1024 * 1024; private static final int HEADER_SIZE = 74; Socket socket; BufferedWriter bw; BufferedReader br; BufferedInputStream bis; public FileDownClientReciever(Socket socket) { this.socket = socket; try { bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); br = new BufferedReader(new InputStreamReader(socket.getInputStream())); bis = new BufferedInputStream(socket.getInputStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void getFileList(String cmd) { try { bw.write(cmd); bw.newLine(); bw.flush(); String readLine; while((readLine = br.readLine()) != null) { if(END.equals(readLine)) { System.out.println("End of read"); break; } System.out.println(readLine); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void getFile(String fileName) { File dir = new File("./DOWNFILE"); if(!dir.exists()) dir.mkdir(); try { //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); bw.write(fileName); bw.newLine(); bw.flush(); //bw.close(); byte[] header = new byte[HEADER_SIZE]; byte[] buffer = new byte[BUF_SIZE]; int readLen; readLen = bis.read(header, 0, HEADER_SIZE); if(readLen == -1) return; byte[] bfileName = new byte[64]; byte[] bfileLen = new byte[10]; System.out.println(new String(header)); System.out.println("bfileName.length : " + bfileName.length); System.out.println("bfileLen.length : " + bfileLen.length); System.arraycopy(header, 0, bfileName, 0, bfileName.length); System.arraycopy(header, bfileName.length, bfileLen, 0, bfileLen.length); String strFileName = (new String(bfileName)).trim(); //String strFileName = new String(bfileName); /* 문자열 길이가 0이면 끝 */ if( strFileName.length() == 0) return; File file = new File("./DOWNFILE/" + strFileName); System.out.println("[" + file.getAbsolutePath() + "]"); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); int fileLen = Integer.parseInt(new String(bfileLen)); while(fileLen > 0) { readLen = bis.read(buffer, 0, Math.min(fileLen, BUF_SIZE)); if(readLen != -1) { bos.write(buffer, 0, readLen); } fileLen -= readLen; } bos.flush(); bos.close(); //bis.close(); //bw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class FileDownServer implements Runnable { private static final int BUF_SIZE = 1024 * 1024; /* 1M */ private static final int HEADER_SIZE = 74; Socket socket; @Override public void run() { while(true) { String fileName = readRequstFile(); File targetFile = searchFile(fileName); //System.out.println("File target file : " + targetFile.getAbsolutePath()); sendFile(targetFile); } //System.out.println("End of Server."); } public FileDownServer(Socket socket) { this.socket = socket; } public String readRequstFile() { String requestFileName = null; try { BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); while((requestFileName = br.readLine()) != null) { if(requestFileName.equalsIgnoreCase("LS")) { sendFileList(); }else { System.out.println("requestFileName : [" + requestFileName + "]"); return requestFileName; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return requestFileName; } public void sendFileList() { File dir = new File("./FILESERVER"); if(!dir.exists()) return; String[] fileNames = dir.list(); try { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); for(String fileName : fileNames) { bw.write(fileName); bw.newLine(); } bw.write("#END#"); bw.newLine(); bw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public File searchFile(String fileName) { File dir = new File("./FILESERVER"); if(!dir.exists()) return null; File[] files = dir.listFiles(); for(File file : files) { if(file.getName().equals(fileName)) { return file; } } return null; } public void sendFile(File file) { /* File Send 한글처리하기가 힘들다... */ /* File Header * FileName : 64 * FileLen : 10 */ byte[] buffer = new byte[BUF_SIZE]; if(file == null) { byte[] fileName = new byte[64]; byte[] fileLen = String.format("%010d", 0).getBytes(); System.arraycopy(fileName, 0, buffer, 0, fileName.length); System.arraycopy(fileLen, 0, buffer, 64, fileLen.length); System.out.println(fileName +" : " + fileLen); System.out.println("BufferHeader : [" + new String(buffer) + "]"); BufferedOutputStream bos; try { bos = new BufferedOutputStream(socket.getOutputStream()); bos.write(buffer, 0, HEADER_SIZE); bos.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return; } byte[] fileName = file.getName().getBytes(); try { byte[] fileLen = String.format("%010d", file.length()).getBytes(); System.out.println("[" + new String(fileLen) + "]"); System.arraycopy(fileName, 0, buffer, 0, fileName.length); System.arraycopy(fileLen, 0, buffer, 64, fileLen.length); System.out.println(fileName +" : " + fileLen); System.out.println("BufferHeader : [" + new String(buffer) + "]"); BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream()); bos.write(buffer, 0, HEADER_SIZE); bos.flush(); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); int reaLen; while((reaLen = bis.read(buffer)) != -1) { bos.write(buffer, 0, reaLen); } bos.flush(); //bis.close(); //bos.close(); }catch(Exception e) { e.printStackTrace(); } } } | cs |
1 2 3 4 5 6 7 8 | public class FileDownServerLauncher { public static void main(String[] args) { FileDownServerListener fileListener = new FileDownServerListener(); fileListener.listenClient(); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FileDownServerListener { private static final int PORT = 12345; ServerSocket server; ExecutorService exeService; public FileDownServerListener() { try { this.server = new ServerSocket(PORT); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } exeService = Executors.newFixedThreadPool(10); } public void listenClient() { while(true) { try { Socket socket = server.accept(); FileDownServer fileDownServer = new FileDownServer(socket); exeService.execute(fileDownServer); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } | cs |