yoni
[34][Network] Runnable 인터페이스 기반 파일 전송, Client 본문
java of educational by contents
[34][Network] Runnable 인터페이스 기반 파일 전송, Client
yoni-1117 2018. 12. 15. 13:48[01] Runnable 인터페이스 기반 파일 전송, Client
- 서버 폴더: C:/201812_java/file/server ← Client로부터 전송받아 저장하는 곳
- Client 폴더: C:/201812_java/file/client ← 서버로 전송할 sample 이미지 저장하는 곳
1. 안정성 향상을 위해 서버와 Client는 sleep 및 buffer 용량을 동일하게 해줍니다.
byte[] buffer = new byte[4096];
Thread.sleep(100); // 0.1 초
- Client 폴더: C:/201812_java/file/client ← 서버로 전송할 sample 이미지 저장하는 곳
1. 안정성 향상을 위해 서버와 Client는 sleep 및 buffer 용량을 동일하게 해줍니다.
byte[] buffer = new byte[4096];
Thread.sleep(100); // 0.1 초
[실행 화면]
/oop/bin>java network.UploadServer
파일 수신 대기 중입니다...
──────────────────
접속됨: /127.0.0.1
파일 수신 대기 중입니다...
──────────────────
스위스.jpg 파일을 수신 받습니다.
##############################
##############################
##############################
##############################
##############################
##############################
##############################
##############################
########################
──────────────────
파일 수신을 완료했습니다.
──────────────────
/oop/bin>java network.UploadClient 127.0.0.1 sw06.jpg
스위스.jpg을 전송 시작합니다.
──────────────────
스위스.jpg을 전송 완료했습니다.
──────────────────
1) 파일을 전송 받는 Server스위스.jpg을 전송 완료했습니다.
──────────────────
▷ UploadServer.java
-----------------------------------------------------------------------------------
package network;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
C:
CD/
CD 201812_java/ws_java/oop/bin
java network.UploadServer
*/
public class UploadServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(2010);
while (true) {
System.out.println("파일 수신 대기 중입니다...");
System.out.println("──────────────────");
Socket socket = serverSocket.accept();//접속
System.out.println("접속됨: " + socket.getInetAddress());
Thread serverThread = new Thread(new ServerThread(socket));//쓰레드만듦 객체를 만들면서 쓰레드를 전송
serverThread.start();//시작
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
serverSocket.close();
} catch (IOException e) {
}
}
}
}
class ServerThread implements Runnable {
Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
BufferedInputStream up = new BufferedInputStream(socket.getInputStream());
DataInputStream fromClient = new DataInputStream(up);//DataInputStream는 한글처리능력이없다-> 비영어권을 위한 클래스임
String filename = fromClient.readUTF();// 텍스트를 입력 받음
System.out.println(filename + " 파일을 수신 받습니다.");
FileOutputStream toFile = new FileOutputStream("C:/201812_java/file/server/" + filename);//FileOutputStream
BufferedOutputStream outFile = new BufferedOutputStream(toFile);
int count = 0;
byte[] buffer = new byte[4096]; //4키로씩 읽어서
while ((up.read(buffer)) > 0) {//출력함
Thread.sleep(50); // 0.05 초 마다
System.out.print("#");
count++;
if (count % 30 == 0) {
System.out.println();
}
outFile.write(buffer);
outFile.flush();
}
try {
outFile.close();
} catch (IOException e) {
}
try {
fromClient.close();
} catch (IOException e) {
}
try {
up.close();
} catch (IOException e) {
}
try {
socket.close();
} catch (IOException e) {
}
System.out.println();
System.out.println("──────────────────");
System.out.println("파일 수신을 완료했습니다.");
System.out.println("──────────────────");
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally{
try {
socket.close();
} catch (IOException e) {
}
}
}
}
-----------------------------------------------------------------------------------
2) 파일을 전송 하는 Client
▷ UploadClient.java
-----------------------------------------------------------------------------------
package network;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.Socket;
/**
C:
CD/
CD 201812_java/ws_java/oop/bin
java network.UploadClient 127.0.0.1 sw06.jpg
*/
public class UploadClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket(args[0], 2010);
String filename = null;
BufferedOutputStream toServer = null;
BufferedInputStream bis = null;
FileInputStream fis = null;
DataOutputStream dos = null;
File file = null;
try {
filename = args[1];
file = new File("C:/201812_java/swiss/" + filename);
if (file.exists() == false) {
System.out.println("파일이 존재하지 않습니다.");
} else{
toServer = new BufferedOutputStream(socket.getOutputStream());
dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF(filename);//파일명 전송
System.out.println(filename + "을 전송 시작합니다.");
System.out.println("──────────────────");
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
byte[] buffer = new byte[4096];
int count = 0;
while ((bis.read(buffer)) > 0) { // -1은 파일을 전부 읽음.
Thread.sleep(50); // 0.05 초
System.out.print("#");
count++;
if (count % 30 == 0) {
System.out.println();
}
toServer.write(buffer);
toServer.flush();
}
try {
bis.close();
} catch (IOException e) {
}
try {
fis.close();
} catch (IOException e) {
}
try {
dos.close();
} catch (IOException e) {
}
try {
toServer.close();
} catch (IOException e) {
}
System.out.println();
System.out.println(filename + "을 전송 완료했습니다.");
}
socket.close();
System.out.println("──────────────────");
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
}
}
}
}
-----------------------------------------------------------------------------------
->답 ▷ UploadServer.java
-----------------------------------------------------------------------------------
package network;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
C:
CD/
CD 201812_java/ws_java/oop/bin
java network.UploadServer
*/
public class UploadServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(2010);
while (true) {
System.out.println("파일 수신 대기 중입니다...");
System.out.println("──────────────────");
Socket socket = serverSocket.accept();
System.out.println("접속됨: " + socket.getInetAddress());
Thread serverThread = new Thread(new ServerThread(socket));
serverThread.start();
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
serverSocket.close();
} catch (IOException e) {
}
}
}
}
class ServerThread implements Runnable {
Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
BufferedInputStream up = new BufferedInputStream(socket.getInputStream());
DataInputStream fromClient = new DataInputStream(up);
String filename = fromClient.readUTF(); // 텍스트 입력
System.out.println(filename + " 파일을 수신 받습니다.");
FileOutputStream toFile = new FileOutputStream("C:/201812_java/file/server/" + filename);
BufferedOutputStream outFile = new BufferedOutputStream(toFile);
int count = 0;
byte[] buffer = new byte[4096];
while ((up.read(buffer)) > 0) {
Thread.sleep(50); // 0.05 초
System.out.print("#");
count++;
if (count % 30 == 0) {
System.out.println();
}
outFile.write(buffer);
outFile.flush();
}
try {
outFile.close();
} catch (IOException e) {
}
try {
fromClient.close();
} catch (IOException e) {
}
try {
up.close();
} catch (IOException e) {
}
try {
socket.close();
} catch (IOException e) {
}
System.out.println();
System.out.println("──────────────────");
System.out.println("파일 수신을 완료했습니다.");
System.out.println("──────────────────");
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally{
try {
socket.close();
} catch (IOException e) {
}
}
}
}
-----------------------------------------------------------------------------------
2) 파일을 전송 하는 Client
▷ UploadClient.java
-----------------------------------------------------------------------------------
package network;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.Socket;
/**
C:
CD/
CD 201812_java/ws_java/oop/bin
java network.UploadClient 127.0.0.1 sw06.jpg
*/
public class UploadClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket(args[0], 2010);
String filename = null;
BufferedOutputStream toServer = null;
BufferedInputStream bis = null;
FileInputStream fis = null;
DataOutputStream dos = null;
File file = null;
try {
filename = args[1];
file = new File("C:/201812_java/file/client/" + filename);
if (file.exists() == false) {
System.out.println("파일이 존재하지 않습니다.");
} else{
toServer = new BufferedOutputStream(socket.getOutputStream());
dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF(filename); // 파일명 전송
System.out.println(filename + "을 전송 시작합니다.");
System.out.println("──────────────────");
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
int count = 0;
byte[] buffer = new byte[4096];
while ((bis.read(buffer)) > 0) { // -1 파일을 전부 읽음.
Thread.sleep(50); // 0.05 초
System.out.print("#");
count++;
if (count % 30 == 0) {
System.out.println();
}
toServer.write(buffer);
toServer.flush();
}
try {
bis.close();
} catch (IOException e) {
}
try {
fis.close();
} catch (IOException e) {
}
try {
dos.close();
} catch (IOException e) {
}
try {
toServer.close();
} catch (IOException e) {
}
System.out.println();
System.out.println(filename + "을 전송 완료했습니다.");
}
socket.close();
System.out.println("──────────────────");
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
}
}
}
}
-----------------------------------------------------------------------------------
'java of educational by contents' 카테고리의 다른 글
[36][JDBC] 서버 실행, 관리자 root계정 암호화, root 접속 설정 (0) | 2018.12.15 |
---|---|
[35][JDBC] 데이터베이스 개론, MySQL 5.6 Potable(개발자 유형)설치, 한글 깨짐 처리 (0) | 2018.12.15 |
[33][Network] 서버로 전송된 현재 온도를 파일로 저장하고 읽어오는 네트워크 프로그램 제작 (0) | 2018.12.15 |
[32][Network] Thread 문자열 전송 기반의 1:1 채팅 서버/클라이언트 (0) | 2018.12.15 |
[31][Network] Thread SYNCHRONIZED 동기화 처리 (0) | 2018.12.09 |
Comments