1. 程式人生 > >Android---49---使用ServerSocket建立伺服器端

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();
		}
	}