JAVA/포스팅

자바 네트워킹(Networking)

짜집퍼박사(짜박) 2023. 11. 27. 13:50

자바 네트워킹은 네트워크 상에서 데이터를 주고받기 위한 메커니즘을 제공합니다. 네트워킹은 주로 소켓을 사용하여 이루어지며, Java는 소켓 프로그래밍을 위한 다양한 클래스와 인터페이스를 제공합니다.

자바에서 네트워킹을 구현하는 주요 클래스 및 개념에 대해 알아보겠습니다.

 

1. 소켓 (Socket) 및 서버 소켓 (ServerSocket)

Socket 클래스: 클라이언트와 서버 간의 통신을 담당합니다. Socket은 서버의 IP 주소 및 포트 번호와 연결하여 데이터를 송수신할 수 있도록 해줍니다.

Socket socket = new Socket("서버 IP", 포트 번호);

- ServerSocket 클래스: 서버에서 클라이언트의 연결을 수락하고 각 클라이언트에 대해 새로운 Socket을 생성합니다.

ServerSocket serverSocket = new ServerSocket(포트 번호);
Socket clientSocket = serverSocket.accept();

 

2. 입출력 스트림 (InputStream 및 OutputStream)

InputStream 및 OutputStream 클래스: 데이터를 주고받을 때 사용되는 스트림입니다. InputStream은 데이터를 읽어오고, OutputStream은 데이터를 쓰는 역할을 합니다.

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

 

3. BufferedReader 및 BufferedWriter

BufferedReader 및 BufferedWriter 클래스: 입출력 스트림을 보조하여 더 효율적인 문자열 처리를 가능케 합니다.

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));

 

4. URL 및 URLConnection

- URL 클래스: 네트워크 상의 자원에 접근하기 위한 클래스로, 파일, HTTP, FTP 등 다양한 프로토콜을 지원합니다.

URL url = new URL("http://www.example.com");

- URLConnection 클래스: URL로부터 생성되며, 네트워크 연결을 통해 데이터를 읽거나 쓰는 메서드를 제공합니다.

URLConnection connection = url.openConnection();

 

5. DatagramSocket 및 DatagramPacket

DatagramSocket 및 DatagramPacket 클래스: UDP 프로토콜을 사용하는 네트워크 통신을 위한 클래스로, 데이터그램을 송수신합니다.

DatagramSocket datagramSocket = new DatagramSocket();
DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("서버 IP"), 포트 번호);

 

6. 네트워크 예외 처리

네트워크 프로그래밍에서는 다양한 예외가 발생할 수 있으므로, 적절한 예외 처리가 필요합니다.

try {
    // 네트워크 코드
} catch (IOException e) {
    e.printStackTrace();
}

 

예제: 간단한 클라이언트-서버 통신

다음은 간단한 클라이언트-서버 통신 예제입니다. 클라이언트는 서버에 "Hello, Server!"를 보내고, 서버는 이를 받아서 화면에 출력하는 예제입니다.

 

서버 코드

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(12345);
            System.out.println("서버 대기 중...");

            Socket clientSocket = serverSocket.accept();
            System.out.println("클라이언트 연결됨");

            BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String message = reader.readLine();
            System.out.println("클라이언트로부터 받은 메시지: " + message);

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

클라이언트 코드

import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 12345);

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            writer.write("Hello, Server!");
            writer.newLine();
            writer.flush();

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

이 예제에서는 간단한 텍스트 기반의 통신을 보여주고 있습니다. 네트워크 프로그래밍은 더 복잡한 예외 처리, 멀티스레드 처리, 보안 등 다양한 측면에서 고려해야 할 사항이 있으므로 더 심화된 학습이 필요합니다.

 

With ChatGPT

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

자바 IP주소(IP address)  (0) 2023.11.27
자바 클라이언트(client)와 서버(sever)  (0) 2023.11.27
자바 직렬화 transient  (0) 2023.11.27
자바 직렬화 Serializable  (0) 2023.11.26
자바 ObjectOutputStream  (0) 2023.11.26