Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中Socket通信之TCP與UDP傳輸原理

Android中Socket通信之TCP與UDP傳輸原理

編輯:關於Android編程

一、Socket通信簡介

Android與服務器的通信方式主要有兩種,一是Http通信,一是Socket通信。兩者的最大差異在於,http連接使用的是“請求—響應方式”,即在請求時建立連接通道,當客戶端向服務器發送請求後,服務器端才能向客戶端返回數據。

而Socket通信中基於TCP/IP協議的通信則是在雙方建立起連接後就可以直接進行數據的傳輸,在連接時可實現信息的主動推送,而不需要每次由客戶端想服務器發送請求。而UDP則是提供無連接的數據報服務,UDP在發送數據報前不需建立連接,不對數據報進行檢查即可發送數據包。。 那麼,什麼是socket?Socket又稱套接字,在程序內部提供了與外界通信的端口,即端口通信。通過建立socket連接,可為通信雙方的數據傳輸傳提供通道。

 

1.1什麼是Socket Socket
是一種抽象層,應用程序通過它來發送和接收數據,使用Socket可以將應用程序添加到網絡中,與處於同一網絡中的其他應用程序進行通信。簡單來說,Socket提供了程序內部與外界通信的端口並為通信雙方的提供了數據傳輸通道。


1.2Socket的分類
根據不同的的底層協議,Socket的實現是多樣化的。本文中只介紹TCP/IP協議和UDP協議的通信,在這個協議族當中主要的Socket類型為流套接字(streamsocket)和數據報套接字(datagramsocket)。流套接字將TCP作為其端對端協議,提供了一個可信賴的字節流服務。數據報套接字使用UDP協議,提供數據打包發送服務。 下面,我們來認識一下這兩種Socket類型的基本實現模型。

 

 

二、Socket 基本通信模型

\


三、Socket基本實現原理

 

3.1基於TCP協議的Socket
1、服務器端首先聲明一個ServerSocket對象並且指定端口號,然後調用Serversocket的accept()方法接收客戶端的數據。accept()方法在沒有數據進行接收的處於堵塞狀態。(Socketsocket=serversocket.accept()),一旦接收到數據,通過inputstream讀取接收的數據。
2、客戶端創建一個Socket對象,指定目標主機(服務器端)的ip地址和端口號(Socketsocket=newSocket("172.168.10.108",8080);),然後獲取客戶端發送數據的輸出流(OutputStreamoutputstream=socket.getOutputStream()),最後將要發送的數據寫入到outputstream即可進行TCP協議的socket數據傳輸。
3.2基於UDP協議的數據傳輸
1、服務器端首先創建一個DatagramSocket對象,並且指點監聽的端口。接下來創建一個空的DatagramPacket數據包對象並指定大小,用於接收數據(byte[] data=new byte[1024];DatagramPacket packet=new DatagramPacket(data,data.length)),使用DatagramSocket的receive方法接收客戶端發送的數據(datagramSocket.receive(packet)),receive()與serversocket的accepet()類似,在沒有數據進行接收的處於堵塞狀態。
2、客戶端也創建個DatagramSocket對象,並且指點監聽的端口。接下來創建一個InetAddress對象,這個對象是一個網絡地址(InetAddress serveraddress=InetAddress.getByName("172.168.1.100")).定義要發送的一個字符串,創建一個DatagramPacke數據包t對象,並制定要講這個數據報包發送到網絡的哪個地址以及端口號,最後使用DatagramSocket的對象的send()發送數據包。(String str="hello";byte[] data=str.getByte();DatagramPacket packet=new DatagramPacket(data,data.length,serveraddress,4567);socket.send(packet);)

 

好了,下面就來看看代碼怎麼實現吧!

四、實現android基於TCP/IP協議的通信

1、Android端(客戶端)代碼:

 


 

2、服務端代碼:

 

 

 

再貼出結果吧:

\

服務器顯示:

192.168.1.102
192.168.1.102
HelloKitty,Java,哈哈哈

 

【總結】基於Socket流式網絡編程,也即使用TCP/IP協議,可以對文件的傳輸進行操作

五、實現android基於UDP協議的通信

1、Android端(客戶端)代碼:

 


 

2、服務端代碼:

 


 

客戶端圖片:

\

服務器顯示:

192.168.1.102發送:HelloKitty,Java,哈哈哈,這是udp

【注】udp的多播還沒實現,實現後我會加上來的

 

好了,這樣就實現了基本的Socket網絡編程了,注意:在android端使用時還需要加入權限哦:

 

    
    
    
    
    
    
    
    
    
    
    
    
    
 

總結:使用UDP方式android端和服務器端接收可以看出,客戶端和服務端的發送和接收大庭相徑,只要端口號和目標主機ip地址正確了,相互通信就沒有問題,而且UDP它們之間的通信是不需要連接的,因為它不管服務端開啟准備接收數據包沒,它只管把數據包發出去了就行。而TCP就不一樣了,如果在服務器沒有開啟的情況下,它會報一個錯,提示與服務端沒有建立連接。TCP使用的是流的方式發送,UDP是以包的形式發送。

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved