1.服务器程序:package com;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * com Server *  * @author Aina.huang E-mail: 674023920@qq.com * @version 创建时间:2010 Jul 14, 2010 10:45:35 AM 类说明 */public class Main {private static final int PORT = 9999;// 端口监听private List<Socket> mList = new ArrayList<Socket>();// 存放客户端socketprivate ServerSocket server = null;private ExecutorService mExecutorService = null;// 线程池/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubnew Main();}public Main() {try {server = new ServerSocket(PORT);mExecutorService = Executors.newCachedThreadPool();// 创建一个线程池System.out.println("Server Start...");Socket client = null;while (true) {client = server.accept();mList.add(client);mExecutorService.execute(new Service(client));// 开启一个客户端线程.}} catch (Exception ex) {ex.printStackTrace();}}public class Service implements Runnable {private Socket socket;private BufferedReader in = null;private String msg = "";public Service(Socket socket) {this.socket = socket;try {in = new BufferedReader(new InputStreamReader(socket.getInputStream()));msg = "user:" + this.socket.getInetAddress() + " come total:"+ mList.size();this.sendmsg();} catch (IOException e) {e.printStackTrace();}}public void run() {// TODO Auto-generated method stubtry {while (true) {if ((msg = in.readLine()) != null) {if (msg.equals("exit")) {System.out.println("sssssssssss");mList.remove(socket);in.close();msg = "user:" + socket.getInetAddress()+ " exit total:" + mList.size();socket.close();this.sendmsg();break;} else {msg = socket.getInetAddress() + " : " + msg;this.sendmsg();}}}} catch (Exception ex) {System.out.println("server 读取数据异常");ex.printStackTrace();}}/** * 发送消息给所有客户端 */public void sendmsg() {System.out.println(msg);int num = mList.size();for (int i = 0; i < num; i++) {Socket mSocket = mList.get(i);PrintWriter pout = null;try {pout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream())),true);pout.println(msg);} catch (IOException e) {e.printStackTrace();}}}}}

2.客户端程序:

package com.Aina.Android;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.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class Test extends Activity implements Runnable {/** Called when the activity is first created. */private TextView tv_msg = null;private EditText ed_msg = null;private Button btn_send = null;private Button btn_login = null;private static final String HOST = "192.168.0.132";private static final int PORT = 9999;private Socket socket = null;private BufferedReader in = null;private PrintWriter out = null;private String content = "";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);tv_msg = (TextView) this.findViewById(R.id.TextView);ed_msg = (EditText) this.findViewById(R.id.EditText01);btn_login = (Button) this.findViewById(R.id.Button01);btn_send = (Button) this.findViewById(R.id.Button02);try {socket = new Socket(HOST, PORT);in = new BufferedReader(new InputStreamReader(socket.getInputStream()));out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);} catch (Exception ex) {ex.printStackTrace();ShowDialog("登陆异常:" + ex.getMessage());}btn_send.setOnClickListener(new Button.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubString msg = ed_msg.getText().toString();if (socket.isConnected()) {if (!socket.isOutputShutdown()) {out.println(msg);}}}});new Thread(this).start();}public void ShowDialog(String msg) {new AlertDialog.Builder(this).setTitle("提示").setMessage(msg).setPositiveButton("OK", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub}}).show();}public void run() {try {while (true) {if(socket.isConnected()){if(!socket.isInputShutdown()){if ((content = in.readLine()) != null) {Log.i("TAG", "++ "+content);content += "\n";mHandler.sendMessage(mHandler.obtainMessage());}else{}}}}} catch (Exception ex) {ex.printStackTrace();}}public Handler mHandler = new Handler() {public void handleMessage(Message msg) {super.handleMessage(msg);Log.i("TAG", "-- "+msg);tv_msg.setText(tv_msg.getText().toString() + content);}};}<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:id="@+id/TextView" android:singleLine="false"android:layout_width="fill_parent"android:layout_height="wrap_content" /><EditText android:hint="content" android:id="@+id/EditText01"android:layout_width="fill_parent"android:layout_height="wrap_content"></EditText><Button android:text="login" android:id="@+id/Button01"android:layout_width="fill_parent"android:layout_height="wrap_content"></Button><Button android:text="send" android:id="@+id/Button02"android:layout_width="fill_parent"android:layout_height="wrap_content"></Button></LinearLayout>

更多相关文章

  1. Android(安卓)线程池管理
  2. 银联手机支付 手机客户端有几个?
  3. android 分享功能
  4. vs xamarin android 监听返回键退出程序
  5. android字体闪烁动画(线程)
  6. Android(安卓)结合WindowManager和WindowManager.LayoutParams显
  7. android 锁屏页
  8. Android中内容观察者的使用---- ContentObserver类详解
  9. android 自带的下拉刷新控件,含Demo(SwipeRefreshLayout控件)

随机推荐

  1. AndroidResource
  2. android 笔记 --- ImageView的属性androi
  3. 由Android想到的事情
  4. Android(安卓)资源文件中@、@android:typ
  5. Android(安卓)GridView属性
  6. android开发_文本按钮 与 输入框
  7. Android安全加密:Https编程
  8. android 仿微信聊天界面,以及语音录制功能
  9. Android中visibility属性VISIBLE、INVISI
  10. Android(安卓)animation Interpolator属