本文實例講述了Android基于TCP和URL協議的網絡編程。分享給大家供大家參考,具體如下:
手機本身是作為手機終端使用的,因此它的計算能力,存儲能力都是有限的。它的主要優勢是攜帶方便,可以隨時打開,而且手機通常總是處于聯網狀態。因此網絡支持對于手機應用非常重要。
Android完全支持JDK本身的TCP,UDP網絡通信API,也可以使用ServerSocket,Socket來建立基于TCP/IP協議的網絡通信,也可以使用DatagramSocket,Datagrampacket來建立基于UDP協議的網絡通信。Android也支持JDK提供的URL,URLConnection等網絡通信API。Android還內置了HttpClient,和HttpUrlConnection這樣可以非常方便地發送HTTP請求,并獲取Http響應。
——基于TCP協議的編程
使用Socket,ServerSocket編程:
使用多線程,handler機制完成網絡編程.
注意:由于手機無線上網的IP地址通常都是由移動運營公司動態分配的,一般不會有自己固定的IP地址,因此很少在手機上運行服務器端,服務器端通常運行在有固定IP的服務器上。
——訪問網絡資源必須放在子線程中
——需要添加訪問網絡的權限
——IP地址,不能寫成127.0.0.1.
——使用Handler機制解析返回的數據
——注意解決亂碼問題
——使用URL進行網絡編程
——使用URL訪問網絡資源
URL對象代表統一資源定位符。它是指向互聯網中的資源。該資源可以使簡單的文件或目錄。也可以是對更復雜的對象的引用。
URL的格式:protocol://host:port/resourceName
可以使用構造器創建URL對象,一旦獲得URL對象,可以調用如下的方法訪問該URL對應的資源:
String getFile()
:獲取URL的資源名
String getHost()
:獲取URL的主機名
String getPath()
:獲取URL的路徑部分
int getPort()
:獲取URL的端口號
String getProtocol()
:獲取URL的協議名稱
String getQuery()
:獲取URL的查詢字符串部分
InputStream url.openStream()
:打開URL的連接,返回一個讀取該資源的InputStream。
代碼編寫:
1.服務器的編寫:
使用Socket和ServerSocket:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class serverTest { public static void main(String[] args) { try { ServerSocket serverSocket= new ServerSocket( 7777 ); System.out.println( "服務器已經在7777端口上啟動了" ); while ( true ) { //有阻塞的功能,拿不到socket下面的方法也不會執行 Socket socket=serverSocket.accept(); System.out.println( "有客戶端發出請求了" ); new ServerThread(socket).start(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
ServerThread繼承Thread:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public class ServerThread extends Thread{ private Socket socket; OutputStream outputStream; public ServerThread(Socket socket) { this .socket=socket; } @Override public void run() { // TODO Auto-generated method stub try { outputStream=socket.getOutputStream(); outputStream.write(( "服務器端的時間" + new Date()).getBytes( "UTF-8" )); outputStream.flush(); outputStream.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } super .run(); } } |
2.客戶端的編寫:
關鍵代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public void click(View view){ new Thread(){ public void run() { try { //客戶端從服務端獲取數據 Socket client= new Socket( "169.254.244.141" , 7777 ); BufferedReader bufferedReader= new BufferedReader ( new InputStreamReader (client.getInputStream())); String text=bufferedReader.readLine(); //tv.setText(text); //線程復用 Message msg= Message.obtain(); msg.what= 0x123 ; msg.obj=text; handler.sendMessage(msg); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); } |
從服務器端得到時間~
效果圖如下:
附:完整實例代碼點擊此處本站下載。
希望本文所述對大家Android程序設計有所幫助。
原文鏈接:http://blog.csdn.net/qq_33642117/article/details/51872377