Android基於TCP和URL協議的網路編程樣本【附demo源碼下載】,androiddemo

來源:互聯網
上載者:User

Android基於TCP和URL協議的網路編程樣本【附demo源碼下載】,androiddemo

本文執行個體講述了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:

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:

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.用戶端的編寫:

關鍵代碼:

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();}

從伺服器端得到時間~

如下:

附:完整執行個體代碼點擊此處本站下載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.