最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android編程之客戶端通過socket與服務(wù)器通信的方法

 更新時(shí)間:2015年11月23日 11:03:48   作者:randyjiawenjie  
這篇文章主要介紹了Android編程之客戶端通過socket與服務(wù)器通信的方法,結(jié)合實(shí)例形式分析了Android基于socket通訊的具體步驟與相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了Android編程之客戶端通過socket與服務(wù)器通信的方法。分享給大家供大家參考,具體如下:

下面是一個(gè)demo,Android客戶端通過socket與服務(wù)器通信。

由于Android里面可以完全使用java.io.*包和java.net.*包,那么,實(shí)際上,邏輯部分與J2SE沒有區(qū)別。只是UI代碼不一樣。

Android客戶端通過socket與服務(wù)器通信分為下面5步:

(1)通過IP地址和端口實(shí)例化Socket,請(qǐng)求連接服務(wù)器;

復(fù)制代碼 代碼如下:
socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321

(2)獲取Socket流以進(jìn)行讀寫,并把流包裝進(jìn)BufferWriter或者PrintWriter
復(fù)制代碼 代碼如下:
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);

這里涉及了三個(gè)類:socket.getOutputStream得到socket的輸出字節(jié)流,OutputStreamWriter是字節(jié)流向字符流轉(zhuǎn)換的橋梁,BufferWriter是字符流,然后再包裝進(jìn)PrintWriter。

(3)對(duì)Socket進(jìn)行讀寫

復(fù)制代碼 代碼如下:
out.println(message);

(4)關(guān)閉打開的流
復(fù)制代碼 代碼如下:
out.close();

完整工程代碼如下:

package com.yarin.android.Examples_08_04; 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.Socket; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
public class Activity01 extends Activity 
{ 
  private final String    DEBUG_TAG  = "Activity01"; 
  private TextView  mTextView = null; 
  private EditText  mEditText = null; 
  private Button   mButton = null; 
  /** Called when the activity is first created. */ 
  @Override 
  public void onCreate(Bundle savedInstanceState) 
  { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mButton = (Button)findViewById(R.id.Button01); 
    mTextView = (TextView)findViewById(R.id.TextView01); 
    mEditText = (EditText)findViewById(R.id.EditText01); 
    //登陸 
    mButton.setOnClickListener(new OnClickListener() 
    { 
      public void onClick(View v) 
      { 
        Socket socket = null; 
        String message = mEditText.getText().toString() + "/r/n";  
        try  
        {   
          //創(chuàng)建Socket 
//         socket = new Socket("192.168.1.110",54321);  
          socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321 
          //向服務(wù)器發(fā)送消息 
          PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);    
          out.println(message);  
          //接收來自服務(wù)器的消息 
          BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
          String msg = br.readLine();  
          if ( msg != null ) 
          { 
            mTextView.setText(msg); 
          } 
          else 
          { 
            mTextView.setText("數(shù)據(jù)錯(cuò)誤!"); 
          } 
          //關(guān)閉流 
          out.close(); 
          br.close(); 
          //關(guān)閉Socket 
          socket.close();  
        } 
        catch (Exception e)  
        { 
          // TODO: handle exception 
          Log.e(DEBUG_TAG, e.toString()); 
        } 
      } 
    }); 
  } 
}

布局文件main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:orientation="vertical" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  > 
  <TextView  
  android:id="@+id/TextView01"  
  android:layout_width="fill_parent"  
  android:layout_height="wrap_content"  
  android:text="這里顯示接收到服務(wù)器發(fā)來的信息" 
  /> 
  <EditText  
  android:id="@+id/EditText01"  
  android:text="輸入要發(fā)送的內(nèi)容"  
  android:layout_width="fill_parent"  
  android:layout_height="wrap_content"> 
  </EditText> 
  <Button  
  android:id="@+id/Button01" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
  android:text="發(fā)送" 
  />  
</LinearLayout>

AndroidManifest.xml文件如下

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
   package="com.yarin.android.Examples_08_04" 
   android:versionCode="1" 
   android:versionName="1.0"> 
  <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Activity01" 
         android:label="@string/app_name"> 
      <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
  </application> 
  <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
  <uses-sdk android:minSdkVersion="5" /> 
</manifest>

當(dāng)然,還有服務(wù)器端得代碼

package com.yarin.android.Examples_08_04; 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
public class Server implements Runnable 
{ 
  public void run() 
  { 
    try 
    { 
      //創(chuàng)建ServerSocket 
      ServerSocket serverSocket = new ServerSocket(54321); 
      while (true) 
      { 
        //接受客戶端請(qǐng)求 
        Socket client = serverSocket.accept(); 
        System.out.println("accept"); 
        try 
        { 
          //接收客戶端消息 
          BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
          String str = in.readLine(); 
          System.out.println("read:" + str);  
          //向服務(wù)器發(fā)送消息 
          PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);    
          out.println("server message");  
          //關(guān)閉流 
          out.close(); 
          in.close(); 
        } 
        catch (Exception e) 
        { 
          System.out.println(e.getMessage()); 
          e.printStackTrace(); 
        } 
        finally 
        { 
          //關(guān)閉 
          client.close(); 
          System.out.println("close"); 
        } 
      } 
    } 
    catch (Exception e) 
    { 
      System.out.println(e.getMessage()); 
    } 
  } 
  //main函數(shù),開啟服務(wù)器 
  public static void main(String a[]) 
  { 
    Thread desktopServerThread = new Thread(new Server()); 
    desktopServerThread.start(); 
  } 
}

先開啟服務(wù)器代碼

java  Server即可

然后啟動(dòng)android模擬器。運(yùn)行結(jié)果

這是Android客戶端。輸入12345,點(diǎn)擊發(fā)送:

這是服務(wù)器端收到的消息

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android編程獲取手機(jī)后臺(tái)運(yùn)行服務(wù)的方法

    Android編程獲取手機(jī)后臺(tái)運(yùn)行服務(wù)的方法

    這篇文章主要介紹了Android編程獲取手機(jī)后臺(tái)運(yùn)行服務(wù)的方法,涉及Android針對(duì)系統(tǒng)服務(wù)的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-12-12
  • Android高手進(jìn)階教程(二十六)之---Android超仿Path菜單的功能實(shí)現(xiàn)!

    Android高手進(jìn)階教程(二十六)之---Android超仿Path菜單的功能實(shí)現(xiàn)!

    本篇文章主要主要介紹了Android超仿Path菜單的功能實(shí)現(xiàn),現(xiàn)在分享給大家,也給大家做個(gè)參考。感興趣的可以了解一下。
    2016-11-11
  • Android集成Unity的兩種方案

    Android集成Unity的兩種方案

    現(xiàn)在市面上的形形色色Android客戶端,為了更優(yōu)的用戶體驗(yàn),我們開發(fā)的上游產(chǎn)品和交互往往會(huì)在界面里設(shè)計(jì)很多動(dòng)效,傳統(tǒng)的一頁頁的靜態(tài)展示頁面已經(jīng)不足以滿足用戶的審美需求了,本文將給大家分享Android集成Unity的兩種方案,感興趣的朋友可以參考下
    2024-05-05
  • Android 通知的基本用法示例代碼

    Android 通知的基本用法示例代碼

    本文主要介紹Android 通知欄,這里整理了相關(guān)的知識(shí)資料,并附示例代碼和詳解,有需要的小伙伴可以參考下
    2016-08-08
  • Android音視頻開發(fā)之MediaCodec的使用教程

    Android音視頻開發(fā)之MediaCodec的使用教程

    在Android開發(fā)中提供了實(shí)現(xiàn)音視頻編解碼工具M(jìn)ediaCodec,針對(duì)對(duì)應(yīng)音視頻解碼類型通過該類創(chuàng)建對(duì)應(yīng)解碼器就能實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行解碼操作。本文通過示例詳細(xì)講解了MediaCodec的使用,需要的可以參考一下
    2022-04-04
  • Android自定義View模仿QQ討論組頭像效果

    Android自定義View模仿QQ討論組頭像效果

    最近發(fā)現(xiàn)QQ討論組的頭像非常不錯(cuò),正好最近又有時(shí)間,所有就動(dòng)手實(shí)踐了下,所以下面這篇文章主要給大家介紹了Android自定義View模仿QQ討論組頭像效果的相關(guān)資料,文中給出了詳細(xì)的介紹的示例代碼,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-04-04
  • Android11文件管理權(quán)限申請(qǐng)?jiān)敿?xì)介紹

    Android11文件管理權(quán)限申請(qǐng)?jiān)敿?xì)介紹

    大家好,本篇文章主要講的是Android11文件管理權(quán)限申請(qǐng)?jiān)敿?xì)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android開發(fā) 旋轉(zhuǎn)屏幕導(dǎo)致Activity重建解決方法

    Android開發(fā) 旋轉(zhuǎn)屏幕導(dǎo)致Activity重建解決方法

    Android開發(fā)文檔上專門有一小節(jié)解釋這個(gè)問題。簡單來說,Activity是負(fù)責(zé)與用戶交互的最主要機(jī)制,接下來為您詳細(xì)介紹
    2012-11-11
  • Android實(shí)現(xiàn)向本地寫入一個(gè)XML文件和解析XML文件

    Android實(shí)現(xiàn)向本地寫入一個(gè)XML文件和解析XML文件

    這篇文章主要介紹了Android實(shí)現(xiàn)向本地寫入一個(gè)XML文件和解析XML文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android SDK三種更新失敗及其解決方法

    Android SDK三種更新失敗及其解決方法

    這篇文章主要介紹了Android SDK三種更新失敗及其解決方法,需要的朋友可以參考下
    2014-10-10

最新評(píng)論

新疆| 铜山县| 荆门市| 长子县| 隆昌县| 康平县| 美姑县| 罗江县| 凉城县| 莲花县| 阳西县| 紫阳县| 绥芬河市| 聂拉木县| 和田县| 中宁县| 祁连县| 鸡泽县| 怀安县| 广平县| 灵台县| 景德镇市| 来宾市| 重庆市| 江达县| 昭平县| 顺昌县| 长子县| 稻城县| 武陟县| 鹿泉市| 清远市| 石楼县| 绥阳县| 林西县| 呼图壁县| 建水县| 大悟县| 康马县| 沙河市| 汪清县|