[java] 자바 소켓 프로그래밍에서의 데이터 전송 방식

자바 소켓 프로그래밍은 소켓을 사용하여 네트워크 상에서 데이터를 전송하는 방식을 의미합니다. 소켓은 클라이언트와 서버 간의 양방향 통신을 가능하게 해주는 역할을 합니다.

TCP/IP와 UDP

자바 소켓 프로그래밍에서는 주로 TCP/IP와 UDP 프로토콜을 사용하여 데이터를 전송합니다. TCP/IP는 신뢰성이 있는 연결 지향형 프로토콜로, 데이터의 순서와 에러 처리를 보장합니다. 반면 UDP는 비연결형 프로토콜로, 신뢰성보다는 빠른 속도를 중요시하는 경우에 사용됩니다.

소켓 생성과 연결

자바 소켓 프로그래밍에서 클라이언트는 Socket 클래스를 사용하여 서버에 연결합니다. 서버는 ServerSocket 클래스를 사용하여 클라이언트의 연결을 받아들입니다. 소켓 생성 후 연결이 성공하면 양쪽 소켓은 입력 및 출력 스트림을 통해 데이터를 주고받을 수 있습니다.

데이터 전송 방식

1. 스트림을 이용한 전송

입력 및 출력 스트림을 이용한 데이터 전송 방식은 가장 일반적인 방법입니다. 클라이언트는 출력 스트림을 통해 데이터를 서버로 전송하고, 서버는 입력 스트림을 통해 데이터를 받습니다. 이 방식은 TCP/IP 프로토콜에서 제공하는 신뢰성과 에러 처리 기능을 사용할 수 있습니다.

// 클라이언트
Socket socket = new Socket("서버 IP 주소", 포트 번호);
OutputStream outputStream = socket.getOutputStream();
outputStream.write("전송할 데이터".getBytes());
outputStream.flush();
socket.close();

// 서버
ServerSocket serverSocket = new ServerSocket(포트 번호);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String receivedData = new String(buffer, 0, length);
socket.close();

2. 객체 직렬화를 이용한 전송

객체 직렬화를 이용한 데이터 전송 방식은 ObjectInputStreamObjectOutputStream 클래스를 사용합니다. 객체를 직렬화하여 전송하고, 받은 쪽에서는 역직렬화하여 원래의 객체로 복원합니다.

// 클라이언트
Socket socket = new Socket("서버 IP 주소", 포트 번호);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
objectOutputStream.writeObject(전송할 객체);
objectOutputStream.flush();
socket.close();

// 서버
ServerSocket serverSocket = new ServerSocket(포트 번호);
Socket socket = serverSocket.accept();
ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
Object receivedObject = objectInputStream.readObject();
socket.close();

요약

자바 소켓 프로그래밍에서는 TCP/IP와 UDP 프로토콜을 통해 데이터를 전송할 수 있습니다. 데이터 전송 방식은 입출력 스트림을 이용한 전송과 객체 직렬화를 이용한 전송이 일반적입니다. 각 방식에 따라 데이터 전송의 속도와 신뢰성을 고려하여 적절한 방식을 선택할 수 있습니다.

참고 자료