[java] 자바 서버에서 소켓 프로그래밍
인터넷을 통해 데이터를 주고받기 위해 소켓 프로그래밍은 기본이 되는 기술 중 하나입니다. 자바에서 소켓 프로그래밍을 사용하여 서버와 클라이언트 간에 효과적으로 통신할 수 있습니다.
소켓 프로그래밍 기본 개념
소켓은 컴퓨터 네트워크를 통해 데이터를 교환하기 위한 연결점입니다. 소켓을 이용하여 서버와 클라이언트 사이에 양방향 통신이 가능합니다. 자바에서는 ServerSocket
과 Socket
클래스를 통해 소켓 프로그래밍을 구현할 수 있습니다.
자바 소켓 프로그래밍 예제
다음은 자바를 사용하여 간단한 에코 서버와 클라이언트를 구현하는 예제입니다.
에코 서버
import java.io.*;
import java.net.*;
public class EchoServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
Socket clientSocket = serverSocket.accept();
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
System.out.println("Exception caught when trying to listen on port 8888 or listening for a connection");
System.out.println(e.getMessage());
}
}
}
에코 클라이언트
import java.io.*;
import java.net.*;
public class EchoClient {
public static void main(String[] args) {
try {
Socket echoSocket = new Socket("localhost", 8888);
PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
out.close();
in.close();
stdIn.close();
echoSocket.close();
} catch (UnknownHostException e) {
System.err.println("Don't know about host: localhost");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: localhost");
System.exit(1);
}
}
}
위의 예제는 클라이언트가 서버로 메시지를 보내면, 서버는 받은 메시지를 클라이언트로 다시 보내는 간단한 에코 기능을 구현한 것입니다.
마치며
소켓 프로그래밍을 통해 자바로 네트워크 통신을 구현할 수 있습니다. 이는 원격 시스템 간에 데이터를 안전하게 전송하고, 실시간 통신 기능을 구현하는 데 유용합니다. 소켓 프로그래밍의 기본 개념을 이해하고, 간단한 예제를 통해 실습해보면 네트워크 프로그래밍에 대한 이해도가 높아질 것입니다.
더 많은 정보는 Oracle 공식 자바 문서를 참조하세요.