웹사이트 검색

Java 소켓 프로그래밍 - 소켓 서버, 클라이언트 예제


Java 소켓 프로그래밍 예제에 오신 것을 환영합니다. 모든 서버는 특정 시스템에서 실행되고 특정 포트에서 수신 대기하는 프로그램입니다. 소켓은 포트 번호에 바인딩되며 서버를 실행할 때 소켓에서 수신 대기하고 클라이언트 요청을 기다립니다. 예를 들어, 포트 8080에서 실행되는 Tomcat 서버는 클라이언트 요청을 기다리고 클라이언트 요청을 받으면 응답합니다.

자바 소켓 프로그래밍

자바 소켓 서버 예제

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 {
    
    //static ServerSocket variable
    private static ServerSocket server;
    //socket server port on which it will listen
    private static int port = 9876;
    
    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //create the socket server object
        server = new ServerSocket(port);
        //keep listens indefinitely until receives 'exit' call or program terminates
        while(true){
            System.out.println("Waiting for the client request");
            //creating socket and waiting for client connection
            Socket socket = server.accept();
            //read from socket to ObjectInputStream object
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //convert ObjectInputStream object to String
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //create ObjectOutputStream object
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //write object to Socket
            oos.writeObject("Hi Client "+message);
            //close resources
            ois.close();
            oos.close();
            socket.close();
            //terminate the server if client sends exit request
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //close the ServerSocket object
        server.close();
    }
    
}

자바 소켓 클라이언트

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{
        //get the localhost IP address, if server is running on some other IP, you need to use that
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        for(int i=0; i<5;i++){
            //establish socket connection to server
            socket = new Socket(host.getHostName(), 9876);
            //write to socket using ObjectOutputStream
            oos = new ObjectOutputStream(socket.getOutputStream());
            System.out.println("Sending request to Socket Server");
            if(i==4)oos.writeObject("exit");
            else oos.writeObject(""+i);
            //read the server response message
            ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);
            //close resources
            ois.close();
            oos.close();
            Thread.sleep(100);
        }
    }
}

서버-클라이언트 통신의 Java 소켓 프로그래밍을 테스트하려면 먼저 SocketServerExample 클래스를 실행해야 합니다. 소켓 서버를 실행하면 "Waiting for client request\를 인쇄한 다음 클라이언트 요청을 기다립니다. 이제 SocketClientExample 클래스를 실행하면 Java 소켓 서버에 요청을 보내고 콘솔에 응답 메시지를 인쇄합니다. . 다음은 자바 소켓 서버 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!!

다음은 Java 소켓 클라이언트 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

이상으로 Java에서 소켓 프로그래밍을 빠르게 정리했습니다. Java 소켓 서버 및 Java 소켓 클라이언트 프로그래밍을 시작할 수 있기를 바랍니다. 참조: 오라클 문서