네트워크 통신은 원격지 시스템과 데이터를 주고 받는 방법입니다. Java에서는 java.net
패키지를 사용하여 네트워크 통신을 구현할 수 있습니다. 이번 글에서는 클래스와 객체를 활용하여 Java로 네트워크 통신을 어떻게 할 수 있는지 알아보겠습니다.
서버의 구현
먼저, 네트워크 서버를 구현하는 클래스를 만들어 보겠습니다. 다음 코드는 간단한 에코 서버를 구현한 예제입니다.
import java.io.*;
import java.net.*;
public class EchoServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(1234);
System.out.println("서버가 시작되었습니다.");
while (true) {
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println("서버에서 받은 메시지: " + inputLine);
}
in.close();
out.close();
clientSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
위 코드에서 ServerSocket
은 클라이언트의 연결을 받는 역할을 합니다. ServerSocket
은 accept()
메서드를 호출함으로써 클라이언트의 연결을 기다립니다. 클라이언트가 연결되면 Socket
객체를 생성하여 통신을 처리합니다.
이 서버는 클라이언트로부터 받은 메시지를 다시 그대로 되돌려주는 에코 서버로, 클라이언트에서 보낸 메시지를 받아 출력한 후 다시 클라이언트로 전송합니다.
클라이언트의 구현
위에서 구현한 서버에 대응하는 클라이언트를 구현해보겠습니다. 다음은 간단한 에코 클라이언트를 구현한 예제입니다.
import java.io.*;
import java.net.*;
public class EchoClient {
public static void main(String[] args) {
try {
Socket clientSocket = new Socket("localhost", 1234);
System.out.println("서버에 연결되었습니다.");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
String response = in.readLine();
System.out.println("서버로부터 받은 메시지: " + response);
}
in.close();
out.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
위 코드에서 Socket
클래스를 사용하여 서버에 접속합니다. 호스트 이름과 포트 번호를 인자로 전달하여 연결을 시도합니다. 서버와의 연결이 성공하면 서버로부터 받은 메시지를 입력하고, 서버로 전송한 후 서버로부터 다시 메시지를 받아 출력합니다.
실행 및 결과 확인
각각의 코드를 컴파일한 후 서버를 먼저 실행해야 합니다. 그런 다음 클라이언트를 실행하고 테스트 메시지를 입력하여 서버와의 통신이 잘 이루어지는지 확인할 수 있습니다.
이 외에도 Java에서는 다양한 네트워크 통신 라이브러리와 클래스를 제공하고 있으므로, 목적에 맞게 적절한 클래스와 객체를 활용하여 네트워크 통신을 구현할 수 있습니다.
이 글을 통해 Java를 이용한 네트워크 통신에 대한 기본적인 내용을 익히고 더 복잡한 동작을 구현할 수 있게 되었습니다. 추가적인 자세한 내용은 Java 공식 문서 및 다른 참고 자료들을 참고하시기 바랍니다.