Java SocketServer

使用 java.net.ServerSocket 建立一個 Java 的 SocketServer。

Java SocketServer

這次要用到的是 java.net.ServerSocket 這個類別。

package com.judysocute;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;

public class Main {
    public static void main(String[] args) {
        // 定義埠號
        int serverPort = 5001;

        ServerSocket serverSocket = null;

        int receiveMsgSize = 0;

        byte[] receiveBuffer = new byte[32];

        try {
            // 建立 ServerSocket
            serverSocket = new ServerSocket(serverPort);

            while (true) {
                System.out.println("服務已經啟動,port: " + serverPort);

                Socket clientSocket = serverSocket.accept();
                SocketAddress clientAddress = clientSocket.getRemoteSocketAddress();
                System.out.println("收到客戶端連線, ip: " + clientAddress);
                InputStream in = clientSocket.getInputStream();
                OutputStream out = clientSocket.getOutputStream();

                while((receiveMsgSize = in.read(receiveBuffer)) != -1) {
                    out.write("伺服器回應: ".getBytes());
                    out.write(receiveBuffer, 0, receiveMsgSize);
                }
                // 釋放 Socket 資源
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

直接從 try 裡面來看!

new ServerSocket() 建構方法可以收一個 int 形態的埠號,也就是服務的位置。 接下來的 while (true) 就是程式不停的執行那段,達到持續監聽的效果。

再來使用 ServerSocketaccept() 方法,可以取得 Socket 物件 它可以與 Client 端進行會話、取得其基本資訊 ( 包括 IP 位置等資訊 )

基本上取得了 Socket 物件就可以算是完成了! 因為接下來的動作就是 Input/Ouput Stream 的操作而已。

測試使用:

telnet localhost 5000
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Hello?
伺服器回應: Hello?
I'm judysocute
伺服器回應: I'm judysocute

我們得到了一個只會學我們說話的 Socket Server。