Android Socket网络通信

Android Socket网络通信1.服务器程序:

  1. package com;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.IOException;  
  6. import java.io.InputStreamReader;  
  7. import java.io.OutputStreamWriter;  
  8. import java.io.PrintWriter;  
  9. import java.net.ServerSocket;  
  10. import java.net.Socket;  
  11. import java.util.ArrayList;  
  12. import java.util.List;  
  13. import java.util.concurrent.ExecutorService;  
  14. import java.util.concurrent.Executors;  
  15.   
  16. / 
  17.   com Server 
  18.    
  19.   @author Aina.huang E-mail: 674023920@qq.com 
  20.   @version 创建时间:2010 Jul 14, 2010 10:45:35 AM 类说明 
  21.  */  
  22. public class Main {  
  23.   
  24.     private static final int PORT = 9999;// 端口监听  
  25.     private List<Socket> mList = new ArrayList<Socket>();// 存放客户端socket  
  26.     private ServerSocket server = null;  
  27.     private ExecutorService mExecutorService = null;// 线程池  
  28.   
  29.     / 
  30.       @param args 
  31.      /  
  32.     public static void main(String[] args) {  
  33.         // TODO Auto-generated method stub  
  34.         new Main();  
  35.     }  
  36.   
  37.     public Main() {  
  38.         try {  
  39.             server = new ServerSocket(PORT);  
  40.             mExecutorService = Executors.newCachedThreadPool();// 创建一个线程池  
  41.             System.out.println("Server Start…");  
  42.             Socket client = null;  
  43.             while (true) {  
  44.                 client = server.accept();  
  45.                 mList.add(client);  
  46.                 mExecutorService.execute(new Service(client));// 开启一个客户端线程.  
  47.             }  
  48.         } catch (Exception ex) {  
  49.             ex.printStackTrace();  
  50.         }  
  51.     }  
  52.   
  53.     public class Service implements Runnable {  
  54.   
  55.         private Socket socket;  
  56.         private BufferedReader in = null;  
  57.         private String msg = "";  
  58.   
  59.         public Service(Socket socket) {  
  60.             this.socket = socket;  
  61.             try {  
  62.                 in = new BufferedReader(new InputStreamReader(socket  
  63.                         .getInputStream()));  
  64.                 msg = "user:" + this.socket.getInetAddress() + " come total:"  
  65.                         + mList.size();  
  66.                 this.sendmsg();  
  67.             } catch (IOException e) {  
  68.                 e.printStackTrace();  
  69.             }  
  70.         }  
  71.   
  72.         public void run() {  
  73.             // TODO Auto-generated method stub  
  74.             try {  
  75.                 while (true) {  
  76.                     if ((msg = in.readLine()) != null) {  
  77.                         if (msg.equals("exit")) {  
  78.                             System.out.println("sssssssssss");  
  79.                             mList.remove(socket);  
  80.                             in.close();  
  81.                             msg = "user:" + socket.getInetAddress()  
  82.                                     + " exit total:" + mList.size();  
  83.                             socket.close();  
  84.                             this.sendmsg();  
  85.                             break;  
  86.                         } else {  
  87.                             msg = socket.getInetAddress() + " : " + msg;  
  88.                             this.sendmsg();  
  89.                         }  
  90.                     }  
  91.   
  92.                 }  
  93.             } catch (Exception ex) {  
  94.                 System.out.println("server 读取数据异常");  
  95.                 ex.printStackTrace();  
  96.             }  
  97.         }  
  98.   
  99.         / 
  100.           发送消息给所有客户端 
  101.          /  
  102.         public void sendmsg() {  
  103.             System.out.println(msg);  
  104.             int num = mList.size();  
  105.             for (int i = 0; i < num; i++) {  
  106.                 Socket mSocket = mList.get(i);  
  107.                 PrintWriter pout = null;  
  108.                 try {  
  109.                     pout = new PrintWriter(new BufferedWriter(  
  110.                             new OutputStreamWriter(mSocket.getOutputStream())),  
  111.                             true);  
  112.                     pout.println(msg);  
  113.                 } catch (IOException e) {  
  114.                     e.printStackTrace();  
  115.                 }  
  116.             }  
  117.         }  
  118.     }  
2.客户端程序:

  1.   …
  2.     public void run() {  
  3.         try {  
  4.             while (true) {  
  5.                 if(socket.isConnected()){  
  6.                     if(!socket.isInputShutdown()){  
  7.                         if ((content = in.readLine()) != null) {  
  8.                             Log.i("TAG", "++ "+content);  
  9.                             content += "n";  
  10.                             mHandler.sendMessage(mHandler.obtainMessage());  
  11.                         }else{  
  12.                               
  13.                         }  
  14.                     }  
  15.                 }  
  16.                   
  17.             }  
  18.         } catch (Exception ex) {  
  19.             ex.printStackTrace();  
  20.         }  
  21.     }  
  22.   
  23.  
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 = ""; @Override public 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 stub String 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); } }; }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>();// 存放客户端socket private ServerSocket server = null; private ExecutorService mExecutorService = null;// 线程池 / @param args / public static void main(String[] args) { // TODO Auto-generated method stub new 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 stub try { 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(); } } } } }