Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android編程之客戶端通過socket與服務器通信的方法

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

編輯:關於android開發

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


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

       本文實例講述了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

  android:orientation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  >

  android:id="@+id/TextView01"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content"

  android:text="這裡顯示接收到服務器發來的信息"

  />

  android:id="@+id/EditText01"

  android:text="輸入要發送的內容"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  android:id="@+id/Button01"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content"

  android:text="發送"

  />

  AndroidManifest.xml文件如下

  package="com.yarin.android.Examples_08_04"

  android:versionCode="1"

  android:versionName="1.0">

  android:label="@string/app_name">

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

  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,點擊發送:

  這是服務器端收到的消息

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved