JAVA/포스팅

자바 소켓 프로그래밍

짜집퍼박사(짜박) 2023. 11. 27. 14:33

자바 소켓 프로그래밍은 네트워크 통신을 위한 기본적인 도구로서 소켓(Socket)을 사용하여 클라이언트와 서버 간의 통신을 구현하는 것을 말합니다. 소켓은 네트워크를 통해 데이터를 주고받을 수 있도록 하는 엔드포인트입니다.

자바에서는 java.net 패키지에서 소켓 관련 클래스와 인터페이스를 제공하고 있습니다.

 

기본적인 소켓 통신 단계

 

1. 서버 소켓 생성 및 대기

ServerSocket 클래스를 사용하여 서버 소켓을 생성하고, 클라이언트의 연결을 대기합니다.

ServerSocket serverSocket = new ServerSocket(8080);
Socket clientSocket = serverSocket.accept(); // 클라이언트 연결 대기

 

2. 클라이언트 소켓 생성 및 연결

Socket 클래스를 사용하여 클라이언트 소켓을 생성하고, 서버에 연결합니다.

Socket socket = new Socket("localhost", 8080);

 

3. 입출력 스트림 획득

클라이언트와 서버 각각에서는 InputStream과 OutputStream을 통해 데이터를 주고받을 수 있습니다.

InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();

 

4. 데이터 송수신

InputStream과 OutputStream을 이용하여 데이터를 송수신합니다.

// 클라이언트에서 데이터 보내기
outputStream.write("Hello, Server!".getBytes());

// 서버에서 데이터 받기
byte[] buffer = new byte[1024];
int bytesRead = inputStream.read(buffer);

 

5. 자원 해제

통신이 끝난 후에는 소켓 및 스트림을 닫아 자원을 해제합니다.

socket.close();
serverSocket.close();

 

예제

다음은 간단한 에코 서버를 구현한 예제입니다. 에코 서버는 클라이언트로부터 받은 데이터를 그대로 다시 전송하는 서버입니다.

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

public class EchoServer {
    public static void main(String[] args) {
        try {
            // 서버 소켓 생성 및 대기
            ServerSocket serverSocket = new ServerSocket(8080);
            System.out.println("서버 대기 중...");

            // 클라이언트 연결 대기
            Socket clientSocket = serverSocket.accept();
            System.out.println("클라이언트가 연결되었습니다.");

            // 입출력 스트림 획득
            InputStream inputStream = clientSocket.getInputStream();
            OutputStream outputStream = clientSocket.getOutputStream();

            // 데이터 수신 및 송신
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                String receivedData = new String(buffer, 0, bytesRead);
                System.out.println("클라이언트로부터 받은 데이터: " + receivedData);

                // 받은 데이터를 다시 클라이언트에게 전송
                outputStream.write(buffer, 0, bytesRead);
                outputStream.flush();
            }

            // 자원 해제
            inputStream.close();
            outputStream.close();
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

이 예제에서는 서버는 8080 포트에서 클라이언트의 연결을 기다리고, 클라이언트로부터 받은 데이터를 다시 클라이언트에게 전송합니다. 클라이언트는 Socket을 사용하여 서버에 연결하고, 사용자의 입력을 서버로 전송한 후 서버로부터 받은 데이터를 출력합니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 UDP소켓 프로그래밍  (0) 2023.11.27
자바 TCP소켓 프로그래밍  (0) 2023.11.27
자바 URLConnection  (0) 2023.11.27
자바 URL(Uniform Resource Location)  (0) 2023.11.27
자바 InetAddress  (0) 2023.11.27