使用Android網絡編程實現簡易聊天室(2)

發表于:2013-07-19來源:Csdn作者:孤云點擊數: 標簽:Android
import java.net.Socket; public class ServerThread implements Runnable { // 定義當前線程所處理的Socket private Socket socket = null; // 該線程所處理的Socket所對應的輸入流 Buffer

  import java.net.Socket;

  public class ServerThread implements Runnable {

  // 定義當前線程所處理的Socket

  private Socket socket = null;

  // 該線程所處理的Socket所對應的輸入流

  BufferedReader br = null;

  public ServerThread(Socket socket) throws IOException {

  this.socket = socket;

  // 初始化該Socket對應的輸入流

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

  "utf-8"));

  }

  @Override

  public void run() {

  try {

  String content = null;

  // 采用循環不斷從Socket中讀取客戶端發送過來的數據

  while ((content = readFromClient()) != null) {

  // 遍歷socketList中的每個Socket,將讀到的內容向每個Socket發送一次

  for (Socket s : MyServer.socketList) {

  OutputStream os = s.getOutputStream();

  os.write((content + "\n").getBytes("utf-8"));

  }

  }

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  /**

  * 定義讀取客戶端數據的方法

  *

  * @return

  */

  private String readFromClient() {

  try {

  return br.readLine();

  }

  // 如果捕捉到異常,表明該Socket對應的客戶端已經關閉

  catch (Exception e) {

  // 刪除該Socket

  MyServer.socketList.remove(socket);

  e.printStackTrace();

  }

  return null;

  }

  }

  客戶端主類(Activity):

  [java] view plaincopyprint?

  package com.home.activity;

  import java.io.OutputStream;

  import java.net.Socket;

  import android.app.Activity;

  import android.os.Bundle;

  import android.os.Handler;

  import android.os.Message;

  import android.view.View;

  import android.view.View.OnClickListener;

  import android.widget.Button;

  import android.widget.EditText;

  import com.home.R;

  import com.home.util.ClientThread;

  public class MultiThreadClient extends Activity {

  private EditText input, show;

  private Button sendBtn;

  private OutputStream os;

  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();

  }

  }

  });

  }

  }

  package com.home.activity;

  import java.io.OutputStream;

  import java.net.Socket;

  import android.app.Activity;

  import android.os.Bundle;

  import android.os.Handler;

  import android.os.Message;

  import android.view.View;

  import android.view.View.OnClickListener;

  import android.widget.Button;

  import android.widget.EditText;

  import com.home.R;

  import com.home.util.ClientThread;

  public class MultiThreadClient extends Activity {

  private EditText input, show;

  private Button sendBtn;

  private OutputStream os;

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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97