Android中基于TCP協議的網絡通信
時間:2018-09-27 來源:未知
一、Android網絡簡介
Android與服務器的通信方式主要有兩種,一種是Http通信,另一種是Socket通信。
HTTP通信:Android中內置HttpClient,這樣可以發方便的發送Http請求并獲取Http響應,簡化了與網站之間的交互。
Socket通信:Android還支持JDK本身的TCP、UDP網絡通信的API,可以使用Java中提供的ServerSocket、Socket類,來建立基于TCP/IP協議的網絡通信。(本章主要講解TCP協議編程的相關內容)也可以使用DatagramSocket、Datagrampacket、MulticastSocket來建立基于UDP協議的網絡通信。
兩者的區別:兩者的大差異在于,Http連接使用的是“請求—響應方式”,即在請求時建立連接通道,當客戶端向服務器發送請求后,服務器端才能向客戶端返回數據。而Socket通信則是在雙方建立起連接后就可以直接進行數據的傳輸,在連接時可實現信息的主動推送,而不需要每次由客戶端想服務器發送請求。
本文引用地址://m.dimor.cc/emb/Column/7502.html
二、TCP協議基礎
TCP/IP通信協議是一種可靠的網絡協議,它在通信的兩端各建立一個Socket,從而在通信的兩端形成網絡虛擬鏈路。Java使用Socket對象來代表兩端的通信接口,并通過Socket產生IO流來進行通信。
IP協議是Internet上使用的一個關鍵協議,它的全稱是Internet Protocol,即Internet協議,通常簡稱IP協議。通過使用IP協議,使Internet成為一個允許連接不同類型的計算機和不同操作系統的網絡。
要使兩臺計算機彼此之間進行通信,必須使兩臺計算機使用同一種“語言”,IP協議只保證計算機能發送和接收分組數據。IP協議負責將消息從一個主機傳送到另一個主機,消息在傳送的過程中被分割成一個個小包。
TCP協議被稱作一種端對端協議,這是因為它為兩臺計算機之間的連接起了重要作用:當一臺計算機需要與另一臺遠程計算機連接時,TCP協議會讓它們建立一個連接:用于發送和接收數據的虛擬鏈路。
通過這種重發機制,TCP協議向應用程序提供可靠地通信連接,使它能夠自動適應網上的各種變化,即使在Internet暫時出現堵塞的情況下,TCP也能夠保證通信的可靠。
雖然IP和TCP這兩個協議的功能不盡相同,也可以分開單獨使用,但它們是在同一時期作為一個協議來設計的,并且在功能上也是互補的,只有兩者結合,才能保證Internet在復雜的環境下正常運行,凡是要連接到Internet的計算機,都必須同時安裝和使用這兩個協議,因此在實際中常把這兩個協議統稱為TCP/IP協議。
三、如何使用ServerSocket創建TCP服務器端:
Java中能接收其他通信實體連接請求的類是ServerSocket,ServerSocket對象用于監聽來自客戶端的Socket連接,若沒有連接則它將一直處于等待狀態。其中監聽來自客戶端請求的方法:Socket accept()。該方法若收到一個客戶端Socket的連接請求,該方法將返回一個與連接客戶端Socket對應的Socket,否則將阻塞等待。代碼如:
ServerSocket socket = new ServerSocket(21300);
While(true){
Socket s = socket.accept();
}
四、使用Socket進行通信
客戶端經常使用Socket來連接到指定服務器,Socket類提供構造器連接到指定遠程主機和遠程端口的構造器,如:
Socket socket = new Socket(“192.168.1.11”,8000);
創建完畢Socket之后就可以進行通信了。Socket提供了InputStream getInputStream()和OutputStream getOutputStream兩個方法來獲取輸入流和輸出流進行數據的讀寫操作。例如:
while(true){
Socket socket = serversocket.accept();
OutputStream os = socket.getOutputStream();
os.write(“你好,我是服務器”.getBytes(“utf-8”));
os.close();
socket.close();
}
此時,就可以進行服務器與客戶端的讀寫操作了。但是考慮到簡單C/S聊天室應用的實現,只了解這個是不夠的,需要加上多線程的才能使代碼變得完善。

