LocalSocketImpl介紹
Socket implementation used for android.net.LocalSocket and android.net.LocalServerSocket. Supports only AF_LOCAL sockets.
LocalSocketImpl該類主要用于和,目前僅支援使用本地位址規則來生成位址。AF_LOCAL介紹
常量
private SocketInputStream fis:繼承InputStream類的本地輸入流,當我們讀入一些輔助資料時需要,内部read函數調用native函數實作相應功能。
private SocketOutputStream fos;繼承OutputStream類的本地輸出流
private Object readMonitor = new Object(); 作讀入同步鎖使用
private Object writeMonitor = new Object();作寫入同步鎖使用
private FileDescriptor fd;檔案描述符
private boolean mFdCreatedInternally; 檔案描述符是否被内部建立
FileDescriptor[] inboundFileDescriptors;接收預讀取期間檔案描述符數組
FileDescriptor[] outboundFileDescriptors;檔案描述符數組,應該在下一次寫入時寫入
構造方法:
LocalSocketImpl()
空參構造方法
LocalSocketImpl(FileDescriptor fd)
通過檔案描述符建立一個新的執行個體。此時在這裡檔案描述符不會被檢查,但是調用者在通過listen調用時會進行驗證socket狀态。
常用方法:
public void create(int sockType)
通過socketType在目前的OS上建立一個socket,需要這個LocalServerSocket.accept()
public void close()
關閉目前的socket
protected void connect(LocalSocketAddress address, int timeout)
建立連接配接函數,注意逾時,目前被忽略
public void bind(LocalSocketAddress endpoint)
使用endpoint名稱綁定socket,隻有在執行個體内體驗被綁定時調用。
protected void listen(int backlog)
監聽函數,底層實作使用Os.listen
protected void accept(LocalSocketImpl s)
從socket接收一個新的連接配接,在新的連結到來之前一直處于阻塞狀态。
protected InputStream getInputStream()
通過目前的執行個體便利輸入流
protected InputStream getOutputStream()
通過目前的執行個體便利輸出流
protected int available()
傳回讀過程中可用位元組的值
protected void shutdownInput()
關閉輸入流
protected void shutdownOutput()
關閉輸出流
public Object getOption(int optID)
擷取socket屬性值,包括SocketOptions.SO_LINGER、SocketOptions.SO_TIMEOUT、SocketOptions.SO_RCVBUF、SocketOptions.SO_SNDBUF、SocketOptions.SO_REUSEADDR和SocketOptions.TCP_NODELAY。
public Object setOption(int optID)
設定socket屬性值。
public void setFileDescriptorsForSend(FileDescriptor[] fds)
利用一個set集合發送檔案描述符到監控點。
public FileDescriptor[] getAncillaryFileDescriptors()
周遊通過輔助資訊發送的檔案描述符set集合。
public LocalSocketAddress getSockAddress()
傳回os的socket名稱,但是這個方法沒有實作,傳回值為null。
總結
LocalSocket
在LocalSocket中,使用LocalSocketImpl建立了LocalSocket對象,通過使用封裝過的bind和connect函數進行用戶端Socket的建立,使用輸出輸出流來進行資料傳遞。
在開發中一般很少使用到bind函數,當用戶端準備完成,使用connect函數,傳入伺服器端準備好的套接字域名即可進行連接配接,之後使用輸入輸出流進行資料傳遞。
LocalServerSocket
在LocalServerSocket中,使用更加簡單,在構造方法中已經進行了用戶端域名的bind和listen,使用accept函數進行用戶端連接配接擷取LocalSocket執行個體即可使用輸入輸出流進行資料交換。
伺服器端開發需要注意多線程接收,因為accept函數是阻塞的,當一個連接配接在等待處理時,如果是不設定多線程處理,其他連接配接到來時就不能處理。