Socket與LocalSocket都可以實現網絡通信,兩個有什么區別呢?
LocalSocket其通信方式與Socket差不多,只是LocalSocket沒有跨越網絡邊界。
於是,思考到一個問題:android應用與PC端的服務器應用進行通信時,能否用Socket、LocalSocke來實現?
1.Socket肯定是能實現的。
2.LocalSocket能實現嗎?
估計是不能,與PC端通信連接時,需要創建套接字實例,要傳入參數主機名和端口號,而LocalSocket和LocalServerSocket都沒有對應的api方法。
可以參考下兩個例子:
http://www.cnblogs.com/Joanna-Yan/p/4708400.html
http://www.cnblogs.com/Joanna-Yan/p/4708293.html
一、Java Socket
socket最初用在基於TCP/IP網絡間進程通信中,以C/S模式進行通信。實現異步操作,共享資源集中處理,提高客戶端的響應能力。
TCP通信基本流程:
Server Client
1.創建socket 1.創建socket
2.bind()
3.listen()
4.accpet()
-------等待客戶端連接-------- 2.connect()
5.讀數據(receive) 3.寫數據(send)
6.寫數據(send) 4.讀數據(receive)
7.關閉socket 5.關閉socket
數據流:
二、Android LocalSocket
LocalSocket
在Unix域名空間創建一個套接字(非服務端)。是對Linux中Socket進行了封裝,采用JNI方式調用,實現進程間通信。
LocalServerSocket
創建服務端Unix域套接字,與LocalSocket對應。
客戶端:
LocalSocket客戶端使用,創建套接字
LocalSocketAddress 套接字地址,其實就是文件描述符(主要是服務器的地址,當然也可以客戶端自個綁定地址)
setSoTimeout設置超時
connect客戶端主動向服務端請求連接
服務端:
LocalServerSocket服務端使用,創建套接字同時指定文件描述符
accept等待客戶端連接(阻塞)
共同:
getInputStream獲取套接字輸入流
getOutputStream獲取套接字輸出流
close關閉套接字,客戶服務都需要