網絡通信之Socket與LocalSocket的比較


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關閉套接字,客戶服務都需要

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM