[java] 네트워크 통신 및 소켓 통신

네트워크 통신은 컴퓨터와 컴퓨터 사이에 데이터를 주고받는 과정을 말합니다. 소켓 통신은 이러한 네트워크 통신을 위해 사용되는 방식 중 하나로, 소켓을 이용하여 데이터를 송수신하는 방법입니다.

소켓(Socket)이란?

소켓은 컴퓨터 사이에서 데이터를 주고받기 위한 인터페이스를 제공하는 소프트웨어 개념입니다. 네트워크 통신을 위한 작은 통신 단자라고 할 수 있습니다.

소켓은 클라이언트와 서버 간의 연결을 수립하고 데이터를 전송하고 수신하는 역할을 합니다. 소켓은 IP 주소와 포트 번호를 사용하여 컴퓨터 간의 통신을 가능하게 합니다.

네트워크 통신의 종류

  1. TCP (Transmission Control Protocol) TCP는 신뢰성 있는 연결 지향형 프로토콜입니다. 데이터를 보내기 전에 연결을 먼저 수립하고, 데이터의 손실이나 손상 여부를 확인하여 안정적으로 데이터를 전송합니다.

  2. UDP (User Datagram Protocol) UDP는 비연결형 프로토콜로, 데이터의 신뢰성을 보장하지 않습니다. 연결을 수립하지 않고 데이터를 바로 전송하므로 TCP보다는 빠른 전송이 가능합니다. 그러나 데이터의 손실이나 손상이 발생할 수 있습니다.

Java에서의 네트워크 통신 및 소켓 통신

Java에서 네트워크 통신을 하기 위해서는 java.net 패키지를 사용합니다. 이 패키지에는 소켓(Socket), 서버 소켓(ServerSocket) 등 네트워크 관련 클래스가 포함되어 있습니다.

클라이언트 소켓 사용 예제

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {

    public static void main(String[] args) {
        String serverIP = "localhost";
        int serverPort = 12345;

        try {
            Socket socket = new Socket(serverIP, serverPort);

            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("Hello, Server.".getBytes());

            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

서버 소켓 사용 예제

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) {
        int serverPort = 12345;

        try {
            ServerSocket serverSocket = new ServerSocket(serverPort);

            Socket socket = serverSocket.accept();

            InputStream inputStream = socket.getInputStream();
            byte[] buffer = new byte[1024];
            int length = inputStream.read(buffer);

            System.out.println("Received: " + new String(buffer, 0, length));

            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 예제 코드에서는 클라이언트에서 서버로 “Hello, Server.”라는 문자열을 전송하고, 서버에서는 해당 문자열을 출력합니다.

이처럼 Java에서는 SocketServerSocket 클래스를 사용하여 소켓 통신을 쉽게 구현할 수 있습니다.

결론

네트워크 통신과 소켓 통신은 컴퓨터 사이의 데이터 전송을 위해 중요한 개념입니다. Java는 SocketServerSocket 클래스를 제공하여 손쉽게 네트워크 통신을 구현할 수 있습니다.