首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

Java Socket 伺服器端基礎程式設計入門

     編輯:J2ME

許多開發者在學習 Java 網路程式設計時,都會對 Socket 的運作機制感到好奇。本文提供一個簡單易懂的 Socket 伺服器基礎範例,實作了客戶端連線接收與訊息廣播功能,適合初學者參考學習。

核心架構設計

這個伺服器採用多執行緒架構:主執行緒負責監聽連線請求,每個客戶端連線建立後會啟動一個獨立的 Exchange 執行緒處理資料收發。伺服器使用 Vector 集合管理所有活躍的客戶端連線資訊,雖然 ArrayList 效能較佳,但 Vector 的執行緒安全特性在這裡更適合。

關鍵程式碼解析

伺服器主類別

public class SocketServer2 extends Thread {
    private Vector<Exchange> clients = new Vector<>();
    private ServerSocket serverSocket;

    public SocketServer2() {
        try {
            serverSocket = new ServerSocket(8000);
            this.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void run() {
        while (true) {
            try {
                Socket client = serverSocket.accept();
                Exchange handler = new Exchange(this, client.getInputStream(), client.getOutputStream());
                clients.add(handler);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public void broadcast(String message) {
        for (Exchange client : clients) {
            try {
                client.getOutputStream().write((message + "\n").getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

客戶端處理執行緒

class Exchange extends Thread {
    private SocketServer2 server;
    private InputStream input;
    private OutputStream output;

    public Exchange(SocketServer2 server, InputStream input, OutputStream output) {
        this.server = server;
        this.input = input;
        this.output = output;
        this.start();
    }

    public void run() {
        try {
            StringBuilder buffer = new StringBuilder();
            int ch;
            while ((ch = input.read()) != -1) {
                if (ch == '\n') break;
                buffer.append((char) ch);
            }
            if (ch == -1) return; // 連線中斷
            server.broadcast(buffer.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

執行與測試

編譯執行後,伺服器會在 8000 埠監聽。可使用 telnet 或自製客戶端連線測試,任何客戶端發送的訊息(以換行符結尾)都會廣播給所有連線中的客戶端。這個簡單範例展示了 Socket 程式設計的核心概念:ServerSocket.accept() 阻塞等待連線、多執行緒並發處理、輸入輸出流操作。

改進方向

  • 加入客戶端斷線偵測與清理機制
  • 使用 BufferedReader/PrintWriter 簡化文字處理
  • 引入 NIO (java.nio) 實現非阻塞高併發
  • 定義通訊協議(如 JSON、Protobuf)替代純文字

掌握這個基礎模型後,您可以輕鬆擴展出聊天室、即時遊戲伺服器等應用。建議進一步研讀《Java 網路程式設計》等經典教材,深入理解 TCP/IP 協議細節與 Java NIO 機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved