[java] 자바 소켓 프로그래밍을 통한 파일 전송 예제
이 예제에서는 자바 소켓 프로그래밍을 사용하여 클라이언트와 서버 간에 파일을 전송하는 방법을 알아보겠습니다. 이를 통해 네트워크 프로그래밍과 파일 입출력을 함께 다룰 수 있습니다.
클라이언트 구현
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
// 서버에 연결
Socket socket = new Socket("127.0.0.1", 8000);
System.out.println("서버에 연결되었습니다.");
// 파일 전송
String filePath = "파일 경로";
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.flush();
bis.close();
bos.close();
socket.close();
System.out.println("파일 전송이 완료되었습니다.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
클라이언트는 “127.0.0.1”과 포트 8000으로 서버에 연결합니다. 파일을 읽어들여서 서버로 전송하는 과정을 거칩니다.
서버 구현
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
// 서버 소켓 생성
ServerSocket serverSocket = new ServerSocket(8000);
System.out.println("서버가 시작되었습니다.");
// 클라이언트로부터 파일 수신
Socket socket = serverSocket.accept();
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("저장할 파일 경로"));
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.flush();
bis.close();
bos.close();
socket.close();
serverSocket.close();
System.out.println("파일 수신이 완료되었습니다.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
서버는 포트 8000으로 클라이언트의 연결을 기다립니다. 클라이언트로 부터 전송된 파일을 수신하여 지정된 경로에 저장합니다.
실행
- 클라이언트와 서버 프로그램을 각각 컴파일합니다.
- 서버 프로그램을 실행합니다.
- 클라이언트 프로그램을 실행하여 파일을 전송합니다.