환영합니다. Java 소켓 프로그래밍 예제에 오신 것을 환영합니다. 각 서버는 특정 시스템에서 실행되며 특정 포트에서 수신 대기하는 프로그램입니다. 소켓은 포트 번호에 바인딩되어 있으며 우리가 서버를 실행하면 소켓에서 대기하며 클라이언트 요청을 기다립니다. 예를 들어, 포트 8080에서 실행되는 톰캣 서버는 클라이언트 요청을 기다리다가 요청을 받으면 응답합니다.
Java 소켓 프로그래밍
소켓은 네트워크에서 실행 중인 두 프로그램 간의 양방향 통신 링크의 한 끝점입니다. 소켓은 데이터가 전송될 대상 애플리케이션을 TCP 계층에서 식별할 수 있도록 포트 번호에 바인딩됩니다. Java 소켓 프로그래밍 예제 튜토리얼에서는 어떻게 Java 소켓 서버와 Java 소켓 클라이언트 프로그램을 작성하는지 배우겠습니다. 또한 서버 클라이언트 프로그램이 소켓에서 데이터를 읽고 쓰는 방법도 배우게 됩니다. java.net.Socket 및 java.net.ServerSocket은 Socket과 Socket 서버를 구현하는 Java 클래스입니다.
Java 소켓 서버 예제
package com.journaldev.socket;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* This class implements java Socket server
* @author pankaj
*
*/
public class SocketServerExample {
//정적 ServerSocket 변수
private static ServerSocket server;
//소켓 서버가 듣게 될 포트
private static int port = 9876;
public static void main(String args[]) throws IOException, ClassNotFoundException{
//소켓 서버 객체 생성
server = new ServerSocket(port);
//'exit' 호출을 받거나 프로그램이 종료될 때까지 계속 대기합니다
while(true){
System.out.println("Waiting for the client request");
//소켓 생성 및 클라이언트 연결 대기
Socket socket = server.accept();
//ObjectInputStream 개체로부터 읽기
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//ObjectInputStream 개체를 문자열로 변환
String message = (String) ois.readObject();
System.out.println("Message Received: " + message);
//ObjectOutputStream 개체 생성
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
//소켓에 개체 작성
oos.writeObject("Hi Client "+message);
//리소스 닫기
ois.close();
oos.close();
socket.close();
//클라이언트가 종료 요청을 보내면 서버 종료
if(message.equalsIgnoreCase("exit")) break;
}
System.out.println("Shutting down Socket server!!");
//ServerSocket 개체 닫기
server.close();
}
}
Java 소켓 클라이언트
package com.journaldev.socket;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* This class implements java socket client
* @author pankaj
*
*/
public class SocketClientExample {
public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
//localhost IP 주소 가져오기, 서버가 다른 IP에서 실행 중인 경우 해당 IP를 사용해야 함
InetAddress host = InetAddress.getLocalHost();
Socket socket = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
for(int i=0; i<5;i++){
//서버에 소켓 연결 설정
socket = new Socket(host.getHostName(), 9876);
//ObjectOutputStream을 사용하여 소켓에 쓰기
oos = new ObjectOutputStream(socket.getOutputStream());
System.out.println("Sending request to Socket Server");
if(i==4)oos.writeObject("exit");
else oos.writeObject(""+i);
//서버 응답 메시지 읽기
ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Message: " + message);
//리소스 닫기
ois.close();
oos.close();
Thread.sleep(100);
}
}
}
자바 소켓 프로그래밍의 서버-클라이언트 통신을 테스트하려면, 먼저 SocketServerExample
클래스를 실행해야 합니다. 소켓 서버를 실행하면, “클라이언트 요청을 기다립니다”라고 출력만 하고 클라이언트 요청을 기다립니다. 이제 SocketClientExample
클래스를 실행하면, 자바 소켓 서버에 요청을 보내고 콘솔에 응답 메시지를 출력합니다. 자바 소켓 서버 SocketServerExample
프로그램의 출력입니다.
Waiting for the client request
Message Received: 0
Waiting for the client request
Message Received: 1
Waiting for the client request
Message Received: 2
Waiting for the client request
Message Received: 3
Waiting for the client request
Message Received: exit
Shutting down Socket server!!
자바 소켓 클라이언트 SocketClientExample
프로그램의 출력입니다.
Sending request to Socket Server
Message: Hi Client 0
Sending request to Socket Server
Message: Hi Client 1
Sending request to Socket Server
Message: Hi Client 2
Sending request to Socket Server
Message: Hi Client 3
Sending request to Socket Server
Message: Hi Client exit
자바에서 소켓 프로그래밍을 빠르게 둘러본 것에 대해 모두입니다. 자바 소켓 서버와 자바 소켓 클라이언트 프로그래밍을 시작할 수 있기를 바랍니다. 참조: Oracle 문서
Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client