자바 네트워킹은 네트워크 상에서 데이터를 주고받기 위한 메커니즘을 제공합니다. 네트워킹은 주로 소켓을 사용하여 이루어지며, 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 |