Android中Socket編程
LocalServerSocket介紹
LocalServerSocket是屬于Android系統內置的一個類,屬于net包下,類似java中的serversocket類的功能。
Non-standard class for creating an inbound UNIX-domain socket in the Linux abstract namespace.
這個類比較簡單,構造方法有兩個:
LocalServerSocket(String name)
Creates a new server socket listening at specified name.
LocalServerSocket(FileDescriptor fd)
Create a LocalServerSocket from a file descriptor that's already been created and bound.
一般使用第一個即可;
本類中方法只有四個,分別是:
- getLocalSocketAddress :獲取當前的連接描述;
- accept:接收一個localsocket;
- getFileDescriptor:獲取當前連接的文件描述符;
- close:關閉socket服務;
查看LocalServerSocket源碼可知:
- 在構造方法中已經默認設置了socket的類型為:LocalSocket.SOCKET_STREAM;
- 綁定了傳入的namespace并且監聽;
- 使用的是LocalSocketAddress傳入namespace生成LocalSocketAddress進行操作;
- 以上操作都是通過LocalSocketImpl【待分析】對象進行的;
總結
本類內容比較簡單,主要實現方式都在LocalSocketImpl中,下次分析。
LocalSocket介紹
This class and the streams returned from it may be used from multiple threads.
內容基本同LocalScoket,主要功能也是通過LocalSocketImpl實現的。
代碼
final static String SOCKET_ADDRESS = "LocalSocketAddress";
LocalSocket localSocketSender, localSocketReceiver;
LocalServerSocket localServerSocket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
localServerSocket = new LocalServerSocket(SOCKET_ADDRESS);
localSocketSender = new LocalSocket();
localSocketSender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
localSocketReceiver = localServerSocket.accept();
send();
receiver();
} catch (IOException e) {
e.printStackTrace();
}
}
public void send() {
new Thread() {
@Override
public void run() {
try {
OutputStream outputStream = localSocketSender.getOutputStream();
outputStream.write(60); // 客戶端發送數據
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
public void receiver() {
new Thread() {
@Override
public void run() {
try {
InputStream inputStream = localSocketReceiver.getInputStream();
int ret = inputStream.read(); // 獲取結果
Log.e("測試結果 ", "" + ret);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}