본문 바로가기
Computer science/Network

Java의 소켓 프로그래밍

by Devsaurus 2024. 1. 17.
728x90

java의 소켓 프로그래밍을 사용하면 프로세스가 데이터 전송 또는 수신을 위한 끝점을 제공하는 소켓을 사용하여 네트워크를 통해 서로 통신할 수 있습니다. 
소켓은 통신 채널을 설정하고 정보를 교환하기 위해 다양한 장치의 프로세스에 대한 표준 메커니즘을 제공합니다. 
Java 프로그래밍 언어는 java.net 패키지를 통해 소켓 프로그래밍을 위한 강력한 클래스 및 API 세트를 제공합니다.
 

Java 소켓 프로그래밍의 주요 구성 요소

1. Socket 클래스

'Socket' 클래스는 클라이언트 측 소켓을 나타냅니다. 서버 소켓에 대한 연결을 설정하고 데이터를 교환하는 데 사용됩니다.
 

2. ServerSocket 클래스

'ServerSocket' 클래스는 서버측 소켓을 나타냅니다. 클라이언트로부터 들어오는 연결 요청을 수신하고 요청을 수락하면 해당 클라이언트와의 통신을 위한 새로운 '소켓'을 생성합니다.
 

3. InetAddress 클래스

'InetAddress' 클래스는 IP 주소를 나타내는 데 사용됩니다. 이는 네트워크에서 서버나 클라이언트의 위치를 식별하는 데 도움이 됩니다.
 

4. InputStream 및 OutputStream 클래스

'InputStream' 및 'OutputStream' 클래스는 각각 소켓에서 읽고 쓰는 데 사용됩니다. 통신에 필요한 기본 입출력 작업을 제공합니다.
 

소켓 프로그래밍의 기본 단계

서버측

 

1. ServerSocket 만들기

ServerSocket 객체를 생성하고 이를 특정 포트에 바인딩합니다.
이 소켓은 들어오는 연결 요청을 수신합니다.

ServerSocket serverSocket = new ServerSocket(8080);

 

2. 연결 수락

들어오는 클라이언트 연결 요청을 기다리고 수락하려면 ServerSocket의 accept() 메서드를 사용하세요. 이 메서드는 클라이언트와의 통신을 위해 새로운 '소켓'을 반환합니다.

Socket clientSocket = serverSocket.accept();

 

3. 입력 및 출력 스트림 가져오기

'소켓'에서 입력 및 출력 스트림을 얻어 데이터를 보내고 받습니다.

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

 

4. 데이터 읽기 및 쓰기

입력 및 출력 스트림을 사용하여 서버와 연결된 클라이언트 간에 데이터를 읽고 씁니다.

// Reading data from the client
int bytesRead = inputStream.read(buffer);

// Writing data to the client
outputStream.write(data);

 

클라이언트 측

1. 소켓 생성

소켓 객체를 생성하고 서버의 IP 주소와 포트에 연결합니다.

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

 

2. 입력 및 출력 스트림 가져오기

'소켓'에서 입력 및 출력 스트림을 얻어 데이터를 보내고 받습니다.

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

 

3. 데이터 읽기 및 쓰기

입력 및 출력 스트림을 사용하여 클라이언트와 연결된 서버 간에 데이터를 읽고 씁니다.

// Reading data from the server
int bytesRead = inputStream.read(buffer);

// Writing data to the server
outputStream.write(data);

 

4. 소켓 닫기

통신이 완료되면 소켓을 닫습니다.

socket.close();

네트워크를 통한 프로세스 간 통신 촉진

네트워킹 프로토콜

소켓은 TCP(전송 제어 프로토콜) 또는 UDP(사용자 데이터그램 프로토콜)와 같은 네트워킹 프로토콜 위에서 작동합니다. TCP는 안정적인 연결 지향 통신을 제공하는 반면, UDP는 연결이 없고 더 빠른 통신 방법을 제공합니다.
 

연결 설정

소켓은 통신에 대한 추상화를 제공하여 서로 다른 장치의 프로세스 간 연결 설정을 용이하게 합니다. 서버는 들어오는 연결을 수신하기 위해 'ServerSocket'을 생성하고, 클라이언트는 연결을 시작하기 위해 'Socket'을 생성합니다.
 

데이터 교환

연결이 설정되면 프로세스는 소켓과 관련된 입력 및 출력 스트림을 사용하여 데이터를 교환할 수 있습니다. 통신은 양방향이 가능하므로 클라이언트와 서버 모두 데이터를 보내고 받을 수 있습니다.
 

실시간 커뮤니케이션

소켓 프로그래밍을 통해 프로세스 간 실시간 통신이 가능하므로 채팅 애플리케이션, 온라인 게임, 분산 시스템과 같은 애플리케이션에 적합합니다.
 

확장성

소켓 프로그래밍은 여러 동시 연결을 지원하여 확장 가능한 솔루션을 허용합니다. 서버는 여러 클라이언트 연결을 동시에 처리할 수 있으며 서로 다른 프로세스 쌍 간에 독립적으로 통신이 발생할 수 있습니다.
 
요약하면 Java의 소켓 프로그래밍은 네트워크를 통한 프로세스 간 통신을 위한 강력하고 유연한 메커니즘을 제공합니다. 이를 통해 개발자는 단순한 클라이언트-서버 상호 작용부터 보다 복잡한 분산 시스템에 이르기까지 다양한 시나리오에서 데이터를 교환할 수 있는 네트워크 애플리케이션을 만들 수 있습니다.

728x90