Java Socket 編程 – Socket 服務器,客戶端示例

歡迎來到Java Socket程式設計範例。每個伺服器都是在特定系統上運行並監聽特定端口的程式。Socket與端口號綁定,當我們運行任何伺服器時,它只是監聽套接字並等待客戶端請求。例如,運行在端口8080上的Tomcat伺服器等待客戶端請求,一旦收到任何客戶端請求,就會對其做出回應。

Java Socket程式設計

套接字是兩個在網絡上運行的程式之間雙向通信鏈路的一端。套接字綁定到端口號,以便TCP層可以識別數據應發送到的應用程序。在Java套接字程式設計範例教程中,我們將學習如何編寫Java套接字伺服器Java套接字客戶端程式。我們還將學習伺服器客戶端程式如何在套接字上讀寫數據。java.net.Socketjava.net.ServerSocket是實現套接字和套接字伺服器的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);
        //不斷監聽,直到接收到“退出”調用或程序終止
        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());
            //將對象寫入Socket
            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{
        //獲取本地主機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);
        }
    }
}

為了測試伺服器-客戶端通訊的 Java 套接字編程,首先我們需要運行 SocketServerExample 類。當你運行套接字伺服器時,它將只會列印“等待客戶端請求”,然後等待客戶端的請求。現在當你運行 SocketClientExample 類時,它將向 Java 套接字伺服器發送請求並將回應訊息列印到控制台。這是 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 套接字客戶端編程。參考:Oracle 文件

Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client