Android基于TCP和URL協(xié)議的網(wǎng)絡(luò)編程示例【附demo源碼下載】
本文實(shí)例講述了Android基于TCP和URL協(xié)議的網(wǎng)絡(luò)編程。分享給大家供大家參考,具體如下:
手機(jī)本身是作為手機(jī)終端使用的,因此它的計(jì)算能力,存儲(chǔ)能力都是有限的。它的主要優(yōu)勢(shì)是攜帶方便,可以隨時(shí)打開,而且手機(jī)通??偸翘幱诼?lián)網(wǎng)狀態(tài)。因此網(wǎng)絡(luò)支持對(duì)于手機(jī)應(yīng)用非常重要。
Android完全支持JDK本身的TCP,UDP網(wǎng)絡(luò)通信API,也可以使用ServerSocket,Socket來建立基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信,也可以使用DatagramSocket,Datagrampacket來建立基于UDP協(xié)議的網(wǎng)絡(luò)通信。Android也支持JDK提供的URL,URLConnection等網(wǎng)絡(luò)通信API。Android還內(nèi)置了HttpClient,和HttpUrlConnection這樣可以非常方便地發(fā)送HTTP請(qǐng)求,并獲取Http響應(yīng)。
——基于TCP協(xié)議的編程
使用Socket,ServerSocket編程:
使用多線程,handler機(jī)制完成網(wǎng)絡(luò)編程.
注意:由于手機(jī)無線上網(wǎng)的IP地址通常都是由移動(dòng)運(yùn)營(yíng)公司動(dòng)態(tài)分配的,一般不會(huì)有自己固定的IP地址,因此很少在手機(jī)上運(yùn)行服務(wù)器端,服務(wù)器端通常運(yùn)行在有固定IP的服務(wù)器上。
——訪問網(wǎng)絡(luò)資源必須放在子線程中
——需要添加訪問網(wǎng)絡(luò)的權(quán)限
——IP地址,不能寫成127.0.0.1.
——使用Handler機(jī)制解析返回的數(shù)據(jù)
——注意解決亂碼問題
——使用URL進(jìn)行網(wǎng)絡(luò)編程
——使用URL訪問網(wǎng)絡(luò)資源
URL對(duì)象代表統(tǒng)一資源定位符。它是指向互聯(lián)網(wǎng)中的資源。該資源可以使簡(jiǎn)單的文件或目錄。也可以是對(duì)更復(fù)雜的對(duì)象的引用。
URL的格式:protocol://host:port/resourceName
可以使用構(gòu)造器創(chuàng)建URL對(duì)象,一旦獲得URL對(duì)象,可以調(diào)用如下的方法訪問該URL對(duì)應(yīng)的資源:
String getFile()
:獲取URL的資源名
String getHost()
:獲取URL的主機(jī)名
String getPath()
:獲取URL的路徑部分
int getPort()
:獲取URL的端口號(hào)
String getProtocol()
:獲取URL的協(xié)議名稱
String getQuery()
:獲取URL的查詢字符串部分
InputStream url.openStream()
:打開URL的連接,返回一個(gè)讀取該資源的InputStream。
代碼編寫:
1.服務(wù)器的編寫:
使用Socket和ServerSocket:
public class serverTest { public static void main(String[] args) { try { ServerSocket serverSocket=new ServerSocket(7777); System.out.println("服務(wù)器已經(jīng)在7777端口上啟動(dòng)了"); while (true) { //有阻塞的功能,拿不到socket下面的方法也不會(huì)執(zhí)行 Socket socket=serverSocket.accept(); System.out.println("有客戶端發(fā)出請(qǐng)求了"); new ServerThread(socket).start(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
ServerThread繼承Thread:
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(("服務(wù)器端的時(shí)間"+new Date()).getBytes("UTF-8")); outputStream.flush(); outputStream.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } super.run(); } }
2.客戶端的編寫:
關(guān)鍵代碼:
public void click(View view){ new Thread(){ public void run() { try { //客戶端從服務(wù)端獲取數(shù)據(jù) Socket client=new Socket("169.254.244.141", 7777); BufferedReader bufferedReader= new BufferedReader (new InputStreamReader (client.getInputStream())); String text=bufferedReader.readLine(); //tv.setText(text); //線程復(fù)用 Message msg= Message.obtain(); msg.what=0x123; msg.obj=text; handler.sendMessage(msg); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); }
從服務(wù)器端得到時(shí)間~
效果圖如下:
附:完整實(shí)例代碼點(diǎn)擊此處本站下載。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android通信方式總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- android 網(wǎng)絡(luò)編程之網(wǎng)絡(luò)通信幾種方式實(shí)例分享
- Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的Json數(shù)據(jù)實(shí)例
- Android中Retrofit+OkHttp進(jìn)行HTTP網(wǎng)絡(luò)編程的使用指南
- Android網(wǎng)絡(luò)編程之UDP通信模型實(shí)例
- android網(wǎng)絡(luò)編程之a(chǎn)ndroid連接網(wǎng)絡(luò)的簡(jiǎn)單示例代碼
- Android通過HttpURLConnection和HttpClient接口實(shí)現(xiàn)網(wǎng)絡(luò)編程
- Android網(wǎng)絡(luò)編程之簡(jiǎn)易新聞客戶端
- Android中實(shí)現(xiàn)TCP和UDP傳輸實(shí)例
- Android使用socket創(chuàng)建簡(jiǎn)單TCP連接的方法
- Android調(diào)用默認(rèn)瀏覽器打開指定Url的方法實(shí)例
相關(guān)文章
python連接clickhouse數(shù)據(jù)庫的兩種方式小結(jié)
這篇文章主要介紹了python連接clickhouse數(shù)據(jù)庫的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Python實(shí)現(xiàn)導(dǎo)彈自動(dòng)追蹤代碼實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)導(dǎo)彈自動(dòng)追蹤代碼實(shí)例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11python中with語句結(jié)合上下文管理器操作詳解
這篇文章主要給大家介紹了關(guān)于python中with語句結(jié)合上下文管理器操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12淺談Keras中shuffle和validation_split的順序
這篇文章主要介紹了淺談Keras中shuffle和validation_split的順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06