国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

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

2020-04-11 11:15:28
字體:
來源:轉載
供稿:網友

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

下面是一個demo,Android客戶端通過socket與服務器通信。

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

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

(1)通過IP地址和端口實例化Socket,請求連接服務器;

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

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

這里涉及了三個類:socket.getOutputStream得到socket的輸出字節流,OutputStreamWriter是字節流向字符流轉換的橋梁,BufferWriter是字符流,然后再包裝進PrintWriter。

(3)對Socket進行讀寫

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

(4)關閉打開的流
復制代碼 代碼如下:
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          {             //創建Socket //         socket = new Socket("192.168.1.110",54321);            socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321           //向服務器發送消息           PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);              out.println(message);            //接收來自服務器的消息           BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));            String msg = br.readLine();            if ( msg != null )           {             mTextView.setText(msg);           }           else           {             mTextView.setText("數據錯誤!");           }           //關閉流           out.close();           br.close();           //關閉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="這里顯示接收到服務器發來的信息"   />   <EditText    android:id="@+id/EditText01"    android:text="輸入要發送的內容"    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="發送"   />  </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>

當然,還有服務器端得代碼

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     {       //創建ServerSocket       ServerSocket serverSocket = new ServerSocket(54321);       while (true)       {         //接受客戶端請求         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);            //向服務器發送消息           PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);              out.println("server message");            //關閉流           out.close();           in.close();         }         catch (Exception e)         {           System.out.println(e.getMessage());           e.printStackTrace();         }         finally         {           //關閉           client.close();           System.out.println("close");         }       }     }     catch (Exception e)     {       System.out.println(e.getMessage());     }   }   //main函數,開啟服務器   public static void main(String a[])   {     Thread desktopServerThread = new Thread(new Server());     desktopServerThread.start();   } }

先開啟服務器代碼

java  Server即可

然后啟動android模擬器。運行結果

這是Android客戶端。輸入12345,點擊發送:

這是服務器端收到的消息

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鸡泽县| 尼木县| 柳江县| 寿阳县| 临清市| 桂平市| 辽源市| 静安区| 登封市| 历史| 五家渠市| 全椒县| 沙洋县| 衡南县| 元朗区| 南开区| 弥渡县| 巴东县| 沧源| 马龙县| 上虞市| 临漳县| 志丹县| 保德县| 定南县| 天柱县| 嘉荫县| 靖安县| 尤溪县| 讷河市| 星子县| 哈尔滨市| 灌云县| 泰来县| 富顺县| 铜鼓县| 永善县| 博乐市| 东方市| SHOW| 仲巴县|