Android编程之客户端通过socket与服务器通信的方法

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,点击发送:

  这是服务器端收到的消息

 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值