1234567891011121314151617181920212223242526 import java.io.IOException;import java.net.Socket;public class FileSenderLauncher {public static void main(String[] args) {// TODO Auto-generated method stubtry {Socket socket = new Socket("127.0.0.1", 12345);FileSender sender = new FileSender(socket);sender.fileSend();} catch (IOException e) {// TODO Auto-generated catch blocke.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 | import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.Socket; public class FileSender { private Socket socket; private static final int HEADER_NAME_OFFSET = 0; private static final int HEADER_LEN_OFFSET = 64; private static final int HEADER_LEN = 74; private static final int BUFFER_SIZE = 1024 * 1024; /* 1M */ public FileSender(Socket socket) { super(); this.socket = socket; } public void fileSend() { File dir = new File("./SEND"); if(!dir.exists()) dir.mkdir(); File[] files = dir.listFiles(); BufferedOutputStream bos = null; try { bos = new BufferedOutputStream(this.socket.getOutputStream()); for(File file : files) { doSendFile(bos, file); } bos.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } public void doSendFile(BufferedOutputStream bos, File file) { /* Header 설계 */ /* file name : 64 */ /* file size : 10 */ /* 74 byte를 해더로 구성 */ try { byte[] buffer = new byte[BUFFER_SIZE]; byte[] fileName = file.getName().getBytes(); String filLenStr = file.length() + ""; byte[] fileLen = filLenStr.getBytes(); System.arraycopy(fileName, 0, buffer, 0, fileName.length); System.arraycopy(fileLen, 0, buffer, HEADER_LEN_OFFSET, fileLen.length); bos.write(buffer, 0, 74); bos.flush(); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); int readLen; int totalFileLen = 0; while((readLen = bis.read(buffer)) != -1) { bos.write(buffer, 0, readLen); totalFileLen += readLen; } bos.flush(); System.out.println("Send File Name : " + file.getName()); System.out.println("API File Size : " + filLenStr); System.out.println("Read File Size : " + totalFileLen); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } | cs |
1 2 3 4 5 6 7 8 9 | public class FileReceiverLauncher { public static void main(String[] args) { // TODO Auto-generated method stub FileReceiver receiver = new FileReceiver(); receiver.getFile(); } } | 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 | import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class FileReceiver { private static final int PORT = 12345; private static final int BUFFER_SIZE = 1024*1024; /* 1M */ ServerSocket server; public FileReceiver() { super(); try { this.server = new ServerSocket(PORT); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void getFile() { try { byte[] buffer = new byte[BUFFER_SIZE]; Socket socket = server.accept(); BufferedInputStream bis = new BufferedInputStream(socket.getInputStream()); boolean endFlag = false; while(!endFlag) { int readLen = bis.read(buffer, 0, 74); if(readLen < 74) { if(readLen == -1) { System.out.println("파일전송 종료"); }else { System.out.println("Header가 다 넘어 오지 않았습니다. : " + readLen); } return; } byte[] fileName = new byte[64]; byte[] fileLen = new byte[10]; System.arraycopy(buffer, 0, fileName, 0, 64); System.arraycopy(buffer, 64, fileLen, 0, 10); int fileSize = Integer.parseInt(new String(fileLen).trim()); File dir = new File("./RECV"); if(!dir.exists()) dir.mkdir(); System.out.println("RECV File Name : " + (new String(fileName)).trim()); System.out.println("RECV File Size : " + fileSize); File recvFile = new File("./RECV/" + (new String(fileName)).trim()); FileOutputStream fos = new FileOutputStream(recvFile); while(fileSize > 0) { readLen = bis.read(buffer, 0, Math.min(fileSize, BUFFER_SIZE)); if(readLen == -1) { endFlag = true; break; } fos.write(buffer, 0, readLen); fileSize -= readLen; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } | cs |