1、package com.tokonow; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import .ServerSocket; import .Socket; import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.os
2、Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public c
3、lass chat extends Activity { Intent intent0 = new Intent(); public static final String SERVERIP = "127.0.0.1";// 这个地址其实没有用到 public static final int SERVERPORT = 8191; // 注意这里和上面重定向的配置是有关系的。 private DataInputStream in; private DataOutputStream out; private Handler messageHandler; Stri
4、ng minput = null; private Thread mThread = null; ServerSocket serverSocket; String moutput=""; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.chat); Bundle bundle =
5、new Bundle(); bundle = getIntent().getExtras(); String name = bundle.getString("name"); TextView text1 = null; text1 = (TextView) findViewById(R.id.tittle); final EditText input = (EditText) findViewById(R.id.chat_input); text1.setText("与" + name + "聊天中"); // new ServerThrea
6、d().start(); // 得到当前线程的Looper实例,由于当前线程是UI线程也可以通过Looper.getMainLooper()得到 Looper looper = Looper.myLooper(); // 此处甚至可以不需要设置Looper,因为 Handler默认就使用当前线程的Looper messageHandler = new MessageHandler(looper); try { serverSocket = new ServerSocket(SERVERPORT); Socket client = serve
7、rSocket.accept(); System.out.println("S: Receiving...\n" + client.getInetAddress()); client.getInetAddress(); in = new DataInputStream(client.getInputStream()); out = new DataOutputStream(client.getOutputStream()); } catch (IOException e1) { // TODO Auto-generated catch bloc
8、k e1.printStackTrace(); } Button send = (Button) findViewById(R.id.send); send.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub minput = input.getText().toString(); try { out.writeUTF(minput);
9、out.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); mThread = new Thread(mRunnable); mThread.start(); } private Runnable mRunnable = new Runnable() { public void run() { while (true) { try {
10、 byte buffer[] = new byte[1024]; in.read(buffer); String msg; msg = new String(buffer, "GB2312").trim(); if (msg != null) { Message message = Message.obtain(); message.obj = msg; messageHandler.sendMessage(message); // 发送消息 } }
11、 catch (Exception e) { // Log.e(DEBUG_TAG, e.toString()); } } } }; class MessageHandler extends Handler { public MessageHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { // 处理收到的消息,把天气信息显示在title上 Tex
12、tView text = (TextView) findViewById(R.id.chat_output); moutput+=(String) msg.obj+"\n"; text.setText(moutput); text.setTextColor(Color.BLACK); // setTitle((String) msg.obj); } } public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { try { if (out != null) out.close(); if (in != null) in.close(); // if(mSocket!=null)mSocket.close(); } catch (Exception e) { e.printStackTrace(); } this.finish(); return true; } return super.onKeyDown(keyCode, event); } }






