Java SocketServer

Java SocketServer

注意標題呀~ 不是上一篇的 WebSocket 唷!是單純的 Socket Server

這次要用到的是 ServerSocket 這個類別,是 java.net 底下的類別!

不羅嗦 直接放程式碼!

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 SocketServer {
    public static void main(String[] args) {
        // 定義埠號
        int serverPort = 5000;

        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) 就是常程式不停的執行那段,達到程序監聽的效果

再來使用 ServerSocket 的 accept() 方法,可以取得 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~
好啦!剩下的應用就看有沒有要往深入寫而已啦~ ( 發現隕石坑! )

wayne

No Comment

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

文章分類