使用Android网络编程实现简易聊天室(3)

发表于:2013-07-19来源:Csdn作者:孤云点击数: 标签:Android
private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); input = (EditText) findViewById(R.id

  private Handler handler;

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  input = (EditText) findViewById(R.id.main_et_input);

  show = (EditText) findViewById(R.id.main_et_show);

  sendBtn = (Button) findViewById(R.id.main_btn_send);

  handler = new Handler() {

  @Override

  public void handleMessage(Message msg) {

  // 如果消息来自子线程

  if (msg.what == 0x234) {

  // 将读取的内容追加显示在文本框中

  show.append("\n" + msg.obj.toString());

  }

  }

  };

  Socket socket;

  try {

  socket = new Socket("192.168.0.101", 20000);

  // 客户端启动ClientThread线程不断读取来自服务器的数据

  new Thread(new ClientThread(socket, handler)).start();

  os = socket.getOutputStream();

  } catch (Exception e) {

  e.printStackTrace();

  }

  sendBtn.setOnClickListener(new OnClickListener() {

  @Override

  public void onClick(View v) {

  try {

  // 将用户在文本框内输入的内容写入网络

  os.write((input.getText().toString() + "\r\n").getBytes());

  // 清空input文本框数据

  input.setText("");

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  });

  }

  }

  客户端线程类:

  [java] view plaincopyprint?

  package com.home.util;

  import java.io.BufferedReader;

  import java.io.IOException;

  import java.io.InputStreamReader;

  import java.net.Socket;

  import android.os.Handler;

  import android.os.Message;

  public class ClientThread implements Runnable {

  private Handler handler;

  // 该线程所处理的Socket所对应的输入流

  private BufferedReader br = null;

  public ClientThread(Socket socket, Handler handler) throws IOException {

  this.handler = handler;

  br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

  }

  @Override

  public void run() {

  try {

  String content = null;

  // 不断读取Socket输入流的内容

  while ((content = br.readLine()) != null) {

  // 每当读到来自服务器的数据之后,发送消息通知程序界面显示该数据

  Message msg = new Message();

  msg.what = 0x234;

  msg.obj = content;

  handler.sendMessage(msg);

  }

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  }

  package com.home.util;

  import java.io.BufferedReader;

  import java.io.IOException;

  import java.io.InputStreamReader;

  import java.net.Socket;

  import android.os.Handler;

  import android.os.Message;

  public class ClientThread implements Runnable {

  private Handler handler;

  // 该线程所处理的Socket所对应的输入流

  private BufferedReader br = null;

  public ClientThread(Socket socket, Handler handler) throws IOException {

  this.handler = handler;

  br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

  }

  @Override

  public void run() {

  try {

  String content = null;

  // 不断读取Socket输入流的内容

  while ((content = br.readLine()) != null) {

  // 每当读到来自服务器的数据之后,发送消息通知程序界面显示该数据

  Message msg = new Message();

  msg.what = 0x234;

  msg.obj = content;

  handler.sendMessage(msg);

  }

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  }

  Activity的布局XML:

  [html] view plaincopyprint?

  

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:orientation="vertical" >

  

  android:layout_width="match_parent"

  android:layout_height="wrap_content"

  android:orientation="horizontal" >

  

  android:id="@+id/main_et_input"

  android:layout_width="240dp"

  android:layout_height="wrap_content" />

原文转自:http://blog.csdn.net/u010142437/article/details/9327541