Socket----java.net

1簡介

socket的類是低端的Tcp客戶端接口。他的實現是靠SocketImp的子類來實現,SocketImp是一個抽閒類,用於Socket、serverSocket的抽閒實現,具體的子列實現功能。Socket類中調用一個工廠類SocketFactary返回一個具體的Socket類。html

Socket: 主要先關函數:java

  • void bind(SocketAddress bindpoint) 與本地ip與端口綁定
  • void close()關閉socket,並關閉相關流、通道資源。
  • void connect(SocketAddress endpoint) ;void connect(SocketAddress endpoint, int timeout) 鏈接serverSocket,若是直接採用流的時候,不用打開connnet,流爲隱式的打開鏈接
  • InetAddress getInetAddress();getInetAddress;int getPort();int getLocalPort();SocketAddress getRemoteSocketAddress();SocketAddress getLocalSocketAddress()或者本地與鏈接的端口與ip地址
  • InputStream getInputStream(); OutputStream getOutputStream();SocketChannel getChannel()打開輸入流、輸出流、通道。若是通道已經打開,輸入輸出流爲代理給通道。輸出流通常採用PrintWriter類(採用OutputStreamWriter進行字節流與字符流的轉換)進行自動刷新。而輸入流通常採用緩存的方式進行。
  • 參數設置,針對Tcp鏈接的相關設置
  1. void setTcpNoDelay(boolean on);boolean getTcpNoDelay()這個設置主要針對一些很小數據包,爲了提升有效數據的傳輸,而進行的一些緩存設置。設置爲True的時候,會緩存數據包,提升有效數據的佔用率。
  2. setSoLinger;int getSoLinger()當關閉socket的時候,若是緩存中還有數據要發送,就等一段時間,阻塞。默認狀況下,關閉鏈接的時候,清除掉緩存數據
  3. void setOOBInline(boolean on);void sendUrgentData(int data)第一個是設置發送緊急字段,第二個是發送具體的字節。int的中低8位發送
  4. void setSoTimeout(int timeout);getSoTimeout讀數據的阻塞時間,0表明無限時間阻塞,其餘正整數爲有必定時間阻塞,單位毫秒
  5. void setSendBufferSize(int size); public int getSendBufferSize()void setReceiveBufferSize(int size);getReceiveBufferSize;爲底層設置緩存大小,不必定被底層採用。
  6. void setKeepAlive(boolean on):boolean getKeepAlive()Tcp長鏈接設置,在沒有數據的時候保持2個小時的長鏈接,再進行探測。
  7. void setTrafficClass(int tc) public int getTrafficClass()。沒看懂,設置幀中的阻塞等級。
  8. boolean getReuseAddress();void setReuseAddress(boolean on)。通常在關閉socket後會保持一段時間端口,防止關閉ack的數據包丟失。默認是不啓用這個功能。
  9. public void close()關閉
  10. void shutdownInput()輸入關閉
  11. void shutdownOutput()輸出關閉
  12. isConnected; boolean isBound();boolean isClosed();boolean isInputShutdown();boolean isOutputShutdown()相關狀態查詢
  13. setSocketImplFactory不用系統默認的Socketimp類,本身定義
  14. void setPerformancePreferences(int connectionTime, int latency, int bandwidth)對一些性能的設置,不必定爲底層採用

ServerSocketapi

服務器端的接口。相比於socket主要不一樣是:緩存

  1. Socket accept()是監聽端口若是有鏈接返回一個socket對象 2.void setSoTimeout(int timeout) 阻塞時間長度,主要針對accept函數。

Client:服務器

serveroracle

參考:socket

  1. docs.oracle.com/javase/tuto…
  2. docs.oracle.com/javase/7/do…

其餘相關的知識

  • 文件表示FileDescriptor。能夠好好深刻一下,根據一下網址深刻研究一下:blog.csdn.net/moakun/arti…
  • TCP的鏈接中斷方式:心跳與長鏈接。
  • SSSocket
  • PrintWrite 打印字符輸出流,與write不一樣是具備自動刷新功能。
  • getChannel尚未看清楚。
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息