Android---49---使用ServerSocket建立伺服器端
使用ServerSocket建立伺服器端:
Java中能夠接受其他通訊實體連線請求的是ServerSocket,ServerSocket物件用於監聽來自客戶端的Socket連線。
如果沒有連線,它將一直處於等待狀態。
ServerSocket構造方法:
構造方法摘要 |
|
(int port) 建立繫結到特定埠的伺服器套接字。 |
|
(int port, int backlog) 利用指定的 backlog 建立伺服器套接字並將其繫結到指定的本地埠號。 |
|
(int port, int backlog, bindAddr) 使用指定的埠、偵聽 backlog 和要繫結到的本地 IP 地址建立伺服器。 |
引數 port 指定伺服器要繫結的埠( 伺服器要監聽的埠), 引數 backlog 指定客戶連線請求佇列的長度, 引數 bindAddr 指定伺服器要繫結的IP 地址.
ServerSocket ss = new ServerSocket(30005);
建立一個與30005埠繫結的伺服器,如果執行時無法繫結到該埠,會丟擲異常,原因可能是該埠已經被其他伺服器程序佔用。
設定客戶連線請求佇列的長度:backlog
許多作業系統限定了佇列的最大長度,一般為50.當佇列中的連線請求達到了佇列的最大容量時,伺服器程序所在的主機會拒絕新的連線請求
只有當伺服器程序通過ServerSocket的accept方法從佇列中取出連線請求,使佇列騰出空位時,佇列才能繼續加入新的連線請求
ServerSocket構造方法中backlog引數是用來設定連線請求佇列的長度的,但是在以下幾種情況下,仍然會採用作業系統限定的佇列的最大長度:
backlog引數的值大於作業系統限定的佇列的最大值
backlog引數的值小於或等於0
在Serversocket構造方法中沒有使用backlog
接收和關閉與客戶端的連線:
接收:ServerSocket的accept()
關閉:close()
建立ServerSocket的步驟
1.例項化一個指定埠的ServerSocket;
2.呼叫ServerSocket的accept()方法;
3.獲得通過Socket得到的輸入輸出流;
4.讀取和寫入到Socket;
5.關閉流。
public static void main(String[] args) throws IOException {
// 建立一個ServerSocket,用於監聽客戶端Socket的連線請求
ServerSocket ss = new ServerSocket(30005);
// 採用迴圈不斷接受來自客戶端的請求
while (true) {
// 每當接收到一個請求,伺服器端也會產生一個對應的Socket
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
os.write("你好".getBytes("utf-8"));
// 關閉
os.close();
s.close();
}
}