Android編程之用戶端通過socket與伺服器通訊的方法

來源:互聯網
上載者:User

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

  這是伺服器端收到的訊息

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.