android Socket实现简单聊天小程序

服务器端:

package org.hwq.echo;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class TalkServer {public static void main(String[] args) throws IOException{ServerSocket server = null;Socket client = null;BufferedReader in = null;PrintWriter out = null;try{server = new ServerSocket(4700);client = server.accept();out = new PrintWriter(client.getOutputStream());in = new BufferedReader(new InputStreamReader(client.getInputStream()));String line = in.readLine();while(!"bye".equals(line)){System.out.println("client:"+line);out.println("echo:"+line);out.flush();line = in.readLine();}}catch (Exception e) {e.printStackTrace();if(client !=null)client.close();if(server != null)server.close();}}}


手机端:
package org.hwq.cho;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import android.app.Activity;import android.content.Context;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 android.widget.Toast;public class EchoActivity extends Activity implements OnClickListener {EditText show,msg;Button send;Handler handler;Socket client;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        handler = new MyHandler();        show = (EditText) findViewById(R.id.show);        msg = (EditText) findViewById(R.id.msg);        send = (Button) findViewById(R.id.send);        send.setOnClickListener(this);    }@Overridepublic void onClick(View arg0) {String message = msg.getText().toString();//System.out.println("msg:"+message);new EchoThread(EchoActivity.this,message).start();}public class MyHandler extends Handler{@Overridepublic void handleMessage(Message msg) {switch(msg.what){case 1:Toast.makeText(EchoActivity.this, "建立连接失败", 0).show();break;case 2:String message = (String) msg.obj;System.out.println("Handler:"+message);show.append("\n"+message);break;}}}private class EchoThread extends Thread{private Context context;private String msg;EchoThread(Context context,String msg){this.context = context;this.msg = msg;}public void run(){if(client == null){try {client = new Socket("192.168.1.102",4700);} catch (IOException e) {Message message = new Message();message.what = 1;handler.sendMessage(message);}}System.out.println("建立连接");try{BufferedReader in;BufferedReader input;PrintWriter out;in = new BufferedReader(new InputStreamReader(client.getInputStream()));out = new PrintWriter(client.getOutputStream());String line = msg;if(!"bye".equals(line)){System.out.println("line:"+line);out.println(line);out.flush();String echo = in.readLine();System.out.println("server:"+echo);Message message = new Message();message.obj = echo;message.what = 2;handler.sendMessage(message);}}catch (Exception e) {}}}}


注意几点:
1、添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>

如果没添加,无法使用socket连接网络。
2、在新启线程中不要使用android系统UI界面
在EchoThrad的run()方法里面,有下面代码:
if(client == null){try {client = new Socket("192.168.1.102",4700);} catch (IOException e) {Message message = new Message();message.what = 1;handler.sendMessage(message);}}

这里的handler.sendMessage(message);是发送一个消息给handler,然后handler根据消息弹出一个Toast显示连接失败。如果这里直接使用
Toast.makeText(EchoActivity.this, "建立连接失败", 0).show();

会报如下错:
Can't create handler inside thread that has not called Looper.prepare()

更多相关文章

  1. Android检测网络是否可用
  2. Android 如何获取keyboard和TP消息 分享
  3. Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公
  4. 关于服务端设置了IPV6时,Android请求网络超慢的问题记录
  5. Java的消息机制

随机推荐

  1. Android真响应式架构——数据流动性
  2. Android 上 Https 双向通信— 深入理解Ke
  3. android 实现自定义键盘的实例
  4. android 使用Intent传递数据之全局变量传
  5. 心血收藏,2G源码
  6. Android工具箱之Context解析
  7. Android系统的上下文对象Context
  8. android 资源文件String字符串拼接
  9. android仿今日头条App、多种漂亮加载效果
  10. Android样式基础--shape篇