java.net.ServerSocket 解析

來源:互聯網
上載者:User

標籤:需要   阻塞   poi   解析   get   target   綁定   stat   安全   

 

註:本文來自:簡書:jianshu

jijs
連結:http://www.jianshu.com/p/7c0722a8b66f
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

構造
  1. public ServerSocket()


    構造一個ServerSocket,但不綁定任何連接埠,所以也不能接受任何的請求串連。以後可以通過bing()方法來進行綁定。

  2. public ServerSocket(int port)


    通過一個連接埠來構造一個ServerSocket對象。
    預設的tcp隊列大小為50.
    預設監聽本地所有的ip地址(如果有多個網卡)。

  1 TCP分為全串連隊列和半串連隊列。這裡說的是全串連隊列  2 半串連隊列:第一次握手,伺服器收到用戶端的請求時,該請求串連放到半串連隊列中。  3 全串連隊列:已經通過三向交握後,把當前串連資訊存放到全串連隊列中。全串連隊列中的串連等待ServerSocket.accpt()處理。
  1. public ServerSocket(int port, int backlog)


    通過一個連接埠和TCP隊列大小來構造一個ServerSocket對象。
    預設監聽本地所有的ip地址(如果有多個網卡)。

  2. public ServerSocket(int port, int backlog, InetAddress bindAddr)


    通過一個連接埠、TCP隊列大小和一個InetAddress 來構造一個ServerSocket對象。

一個伺服器可能有多個網卡,多個ip地址,通過此構造傳入一個InetAddress ,可以只監聽從此網卡過來的請求串連。
比如:一個電腦上有兩個網卡,一個是外網地址,一個是內網地址。為了安全此ServerSocket只允許監聽內網ip地址的請求,而不接收外網請求。

bind 方法

通過無參構造的ServerSocket對象,需要bing方法進行綁定操作才能處理用戶端的請求。

  1 public void bind(SocketAddress endpoint) throws IOException {  2     bind(endpoint, 50);  3 }  4   5 public void bind(SocketAddress endpoint, int backlog) throws IOException {  6 ...  7 }
  1. 通過SocketAddress 進行綁定,預設TCP隊列大小為50。
  2. 通過SocketAddress 和 TCP請求隊列大小 兩個參數 進行綁定。
accept 方法
  1 public Socket accept()

該方法會從全串連隊列中擷取一個用戶端Socket請求。該方法是阻塞方法。如果當前沒有請求的串連,則會一直阻塞,直到有用戶端串連請求為止。

擷取ServerSocket相關資訊
  1. public InetAddress getInetAddress()
    擷取本地地址,如果本地有多個ip,隨機返回一個。
  2. public int getLocalPort()
    擷取綁定的連接埠。

如果構造ServerSocket中預設連接埠傳入一個0,則是隨機產生一個連接埠,這時就需要使用此方法來擷取連接埠資訊。

  1. public SocketAddress getLocalSocketAddress()
    返回本地地址和連接埠。

 

通過源碼發現該方法內部擷取本地地址是通過調用getInetAddress()方法進行擷取的。擷取連接埠是通過getLocalPort()方法擷取的。

使用ServerSocket 判斷當前系統已經佔用的連接埠
  1 public static void main(String[] args) throws Exception {  2     for(int port=1; port<65535; port++){  3         try{  4             ServerSocket s = new ServerSocket(port);  5         }catch(IOException e){  6             System.out.println("當前系統中已經使用的連接埠:"+port);  7         }  8     }  9 }

運行結果如下:

java.net.ServerSocket 解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.