java網路編程(下)__編程

來源:互聯網
上載者:User
一、用戶端Socket 定義:Socket是兩台主機之間的一個串連,一單建立了串連,本地和遠程主機就從這個socket得到輸入資料流和輸出資料流,使用這個流可以同時發送和接收資料。Socket對程式員掩蓋了網路的底層細節,如錯誤偵測、包大小、包分解、包重傳、網路地址等。 1.構造和串連 Socket javanetSocket 類是java完成用戶端 TCP 操作的基礎類,這個類使用原生代碼與主機作業系統的本地 TCP 棧進行通訊。

建構函式:

 pubic Socket(String host,int port) throws UnknownHostException,IOException public Socket(InetAddress host,int port) throws IOException /** 下面兩個建構函式可以指定本網介面和連接埠來串連,網路介面可以是物理介面也可以是虛擬介面,如果localPort傳入 0,java則會隨機播放 1024 到 65535 之間的一個可用連接埠 */ public Socket(String host,int port,InetAddress interface,int localPort) throws IOException,UnknownHostException public Socket(InetAddress host,int port,InetAddress interface,int localPort) throws IOException //看源碼其實可以發現傳入的參數其實是兩個 SocketAddress(Address + port),一個是串連的主機,一個是本網介面。 /** 以上的所有的構造方法中都會調用另外一個建構函式: public Socket (SocketAddress address,SocketAddress localAddr,boolean stream):在這個建構函式中會調用 bind(localAddress);connect(address);所以建立串連時是要先建立一個 Socket,然後調用 bind 方法開始綁定,最後調用 connect 方法進行串連。 所以以下3個建構函式是沒有進行串連的 */ public Socket() public Socket(Proxy proxy) protected Socket(SocketImpl impl) 

當建立起了串連,這時候就可以開始相互發送資料了。

 public InputStream getInputStream() throws IOException;//獲得輸入資料流,可以從中擷取服務端發來的資料 public OutputStream getOutputStream() throws IOException;//獲得輸出資料流,可以用其向服務端發送資料 

半關閉 Socket

 public void close();//同時關閉 Socket的輸入和輸出資料流 public void shutdownInput() throws IOException ;//關閉輸入資料流,shutdown方法並不關閉socket public void shutdownOutput() throws IOException ;//關閉輸出資料流, 

擷取 Socket的資訊

 public InetAddress getInetAddress();//返回遠程主機的地址 public int getPort();//返回遠程主機的連接埠 public InetAddress getLocalAddress();//返回本地主機的地址 public int getLocalPort();//返回本地主機的連接埠 public boolean isClosed();//是否已經關閉 public boolean isConnected();//表示的是:是否從未串連過一個遠程主機,只要串連過,就返回true 

Socket選項:都有對應的getter 與 setter 方法

 TCP_NODELAY:是否關閉 Socket 的緩衝,如果關閉了,則一旦就緒就會發送,而不會等到緩衝區滿 SO_LINGER:表示當socket關閉時如何處理尚未發送的資料報,可以設定延遲的秒數,一旦時間到,無論還有沒有資料都關閉串連。最大延遲時間為65535秒 SO_TIMEOUT:表示從socket擷取資料時,read方法會阻塞的時間長度。0為無限,也是預設值 SO_REVBUF:設定接收緩衝區的大小,頭層皮利用緩衝區提升網路的效能 SO_SNDBUF:設定發送緩衝區的大小,但是實際上會設定為發送 和 接收緩衝區大小較小的一個 SO_KEEPALIVE:用戶端會偶爾通過一個空閑串連發送一個資料包,以確保伺服器未崩潰 OOBINLINE:Out Of Band ,緊急資料,會立即發送 SO_REUSEADDR:重用連接埠,可能會出現前一個Socket 未接收的資料  2.Socket地址 定義:SocketAddress類表示一個串連端點,這是個空的抽象類別,其主要用途是為暫時的 Socket串連資訊(如 ip地址 和 連接埠)提供一個方便的儲存 

方法:

 public SocketAddress getRemoteSocketAddress();//返回的是所串連系統的地址 public SocketAddress getLocalSocketAddress();//返回的是發起串連的地址 

子類 InetSocketAddress 建立: 

 public InetSocketAddress(InetAddress address,int port)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.