Java SocketServer
使用 java.net.ServerSocket 建立一個 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) 就是程式不停的執行那段,達到持續監聽的效果。
再來使用 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。