[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으로 클라이언트의 연결을 기다립니다. 클라이언트로 부터 전송된 파일을 수신하여 지정된 경로에 저장합니다.

실행

  1. 클라이언트와 서버 프로그램을 각각 컴파일합니다.
  2. 서버 프로그램을 실행합니다.
  3. 클라이언트 프로그램을 실행하여 파일을 전송합니다.

참고 자료