android开发之socket传递

client:

[java]  view plain copy
  1. package com.SocketClient;    
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.InputStreamReader;  
  5. import java.io.PrintWriter;  
  6. import java.net.Socket;  
  7.   
  8. import android.app.Activity;  
  9. import android.app.AlertDialog;  
  10. import android.content.DialogInterface;  
  11. import android.os.Bundle;  
  12. import android.os.Handler;  
  13. import android.os.Message;  
  14. import android.util.Log;  
  15. import android.view.KeyEvent;  
  16. import android.view.View;  
  17. import android.view.View.OnClickListener;  
  18. import android.widget.Button;  
  19. import android.widget.EditText;  
  20.   
  21. public class SocketClient extends Activity {  
  22.     /** Called when the activity is first created. */  
  23.     private final String        DEBUG_TAG   = "Activity";  
  24.     private  String ipaddress;  
  25.     private  int port ; //服务器IP、端口   
  26.     private Thread mThread = null;  
  27.     private Socket              mSocket     = null;  
  28.     private Button              mButton_In  = null;  
  29.     private Button              mButton_Send= null;  
  30.     private EditText            mEditText01     = null;  
  31.     private EditText            mEditText02     = null;  
  32.     private BufferedReader      mBufferedReader = null;  
  33.     private EditText            mPortEdit       =null;  
  34.     private EditText            mIpEdit         =null;  
  35.     private PrintWriter mPrintWriter = null;  
  36.     private  String mStrMSG = "";  
  37.     boolean connected;  
  38.     @Override  
  39.     public void onCreate(Bundle savedInstanceState) {  
  40.         super.onCreate(savedInstanceState);  
  41.         setContentView(R.layout.main);  
  42.         mButton_In = (Button)findViewById(R.id.Button_In);  
  43.         mButton_Send = (Button)findViewById(R.id.Button_Send);  
  44.         mEditText01=(EditText)findViewById(R.id.EditText01);  
  45.         mEditText02=(EditText)findViewById(R.id.EditText02);  
  46.         mPortEdit=(EditText)findViewById(R.id.PortEdit);  
  47.         mIpEdit=(EditText)findViewById(R.id.IpEdit);  
  48.         mButton_In.setOnClickListener(new OnClickListener()  
  49.         {  
  50.             public void onClick(View v)  
  51.             {  
  52.                 if(!connected)  
  53.                 {  
  54.                     ipaddress=mIpEdit.getText().toString();  
  55.                     port=Integer.parseInt(mPortEdit.getText().toString());  
  56.                     try   
  57.                     {  
  58.                         mSocket = new Socket(ipaddress, port);      //连接服务器  
  59.                         mBufferedReader = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));//取得输入、输出流  
  60.                         mPrintWriter=new PrintWriter(mSocket.getOutputStream(), true);     
  61.                         mIpEdit.setEnabled(false);  
  62.                         mPortEdit.setEnabled(false);  
  63.                         mButton_In.setText("disConnect");  
  64.                         connected=true;  
  65.                         mEditText02.setEnabled(connected);  
  66.                         mButton_Send.setEnabled(connected);  
  67.                     }  
  68.                     catch (Exception e)   
  69.                     {  
  70.                         new AlertDialog.Builder(SocketClient.this)  
  71.                         .setTitle("ERROR!")  
  72.                         .setMessage(e.toString())  
  73.                         .setPositiveButton  
  74.                         (  
  75.                             "确定",  
  76.                             new DialogInterface.OnClickListener()  
  77.                             {  
  78.                                 public void onClick(DialogInterface dialoginterface,int i)  
  79.                                 {  
  80.                                     mIpEdit.setText("");  
  81.                                     mPortEdit.setText("");  
  82.                                 }  
  83.                             }  
  84.                         )  
  85.                         .show();      
  86.                         Log.e(DEBUG_TAG, e.toString());  
  87.                     }  
  88.                 }  
  89.                 else  
  90.                 {  
  91.                     connected=false;  
  92.                     mEditText02.setText("");  
  93.                     mButton_In.setText("Connect");  
  94.                     mPrintWriter.print("exit"+"\n");  
  95.                     mPrintWriter.flush();  
  96.                     mIpEdit.setEnabled(true);  
  97.                     mPortEdit.setEnabled(true);  
  98.                     mEditText02.setEnabled(connected);  
  99.                     mButton_Send.setEnabled(connected);  
  100.                 }  
  101.             }  
  102.         });  
  103.           
  104.         mButton_Send.setOnClickListener(new OnClickListener()  
  105.         {  
  106.             public void onClick(View v)  
  107.             {  
  108.                 String str = mEditText02.getText().toString() + "\n";//取得编辑框中我们输入的内容  
  109.                 mEditText02.setText("");  
  110.                 try   
  111.                 {     
  112.                     mPrintWriter.print(str);//发送给服务器  
  113.                     mPrintWriter.flush();     
  114.                 }  
  115.                 catch (Exception e)   
  116.                 {  
  117.                     Log.e(DEBUG_TAG, e.toString());  
  118.                 }  
  119.             }  
  120.         });  
  121.         mThread = new Thread(mRunnable);  
  122.         mThread.start();  
  123.     }  
  124.     private Runnable mRunnable= new Runnable()   
  125.     {  
  126.         public void run()  
  127.         {  
  128.             while (true)  
  129.             {  
  130.                 try  
  131.                 {  
  132.                     if ( (mStrMSG = mBufferedReader.readLine()) != null )  
  133.                     {  
  134.                         mStrMSG+="\n";//消息换行  
  135.                         mHandler.sendMessage(mHandler.obtainMessage());// 发送消息  
  136.                     }     
  137.                 }  
  138.                 catch (Exception e)  
  139.                 {  
  140.                     Log.e(DEBUG_TAG, e.toString());  
  141.                 }  
  142.             }  
  143.         }  
  144.     };  
  145.       
  146.     Handler mHandler= new Handler()   
  147.     {                                         
  148.           public void handleMessage(Message msg)                                          
  149.           {                                           
  150.               super.handleMessage(msg);                                               
  151.               try                               // 刷新                 
  152.               {   
  153.                   mEditText01.append(mStrMSG);//将聊天记录添加进来     
  154.               }                                           
  155.               catch (Exception e)                                             
  156.               {                                                                                   
  157.                   Log.e(DEBUG_TAG, e.toString());                                             
  158.               }                                       
  159.           }                                   
  160.      };  
  161.      public boolean onKeyDown(int keyCode,KeyEvent event)  
  162.      {  
  163.          if(keyCode==KeyEvent.KEYCODE_BACK)  
  164.          {  
  165.                 String str="exit"+"\n";  
  166.                 try   
  167.                 {     
  168.                     mPrintWriter.print(str);//发送给服务器  
  169.                     mPrintWriter.flush();     
  170.                 }  
  171.                 catch (Exception e)   
  172.                 {  
  173.                     Log.e(DEBUG_TAG, e.toString());  
  174.                 }  
  175.                 this.finish();  
  176.          }  
  177.          return true;  
  178.      }  
  179. }  


 

server:

[java]  view plain copy
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4. import java.io.PrintWriter;  
  5. import java.net.ServerSocket;  
  6. import java.net.Socket;  
  7. import java.util.ArrayList;  
  8. import java.util.List;  
  9. import java.util.concurrent.ExecutorService;  
  10. import java.util.concurrent.Executors;  
  11.   
  12. public class Server  
  13. {  
  14.     private static final int SERVERPORT = 8888//服务器端口  
  15.     private static List<Socket> mClientList = new ArrayList<Socket>(); //客户端连接  
  16.     private ExecutorService mExecutorService;  //线程池  
  17.     private ServerSocket mServerSocket;  //ServerSocket对象  
  18.     public static void main(String[] args)  
  19.     {  
  20.         new Server();  
  21.     }  
  22.     public Server()  
  23.     {  
  24.         try  
  25.         {  
  26.             mServerSocket = new ServerSocket(SERVERPORT);//设置服务器端口  
  27.             mExecutorService = Executors.newCachedThreadPool();//创建一个线程池  
  28.             System.out.println("start...");  
  29.             Socket client = null;           //用来临时保存客户端连接的Socket对象  
  30.             while (true)  
  31.             {  
  32.                 client = mServerSocket.accept(); //接收客户连接并添加到list中  
  33.                 mClientList.add(client);  
  34.                 mExecutorService.execute(new ThreadServer(client));//开启一个客户端线程  
  35.             }  
  36.         }  
  37.         catch (IOException e)  
  38.         {  
  39.             e.printStackTrace();  
  40.         }  
  41.     }     
  42.     //每个客户端单独开启一个线程  
  43.     static class ThreadServer implements Runnable  
  44.     {  
  45.         private Socket          mSocket;  
  46.         private BufferedReader  mBufferedReader;  
  47.         private PrintWriter     mPrintWriter;  
  48.         private String          mStrMSG;  
  49.   
  50.         public ThreadServer(Socket socket) throws IOException  
  51.         {  
  52.             this.mSocket = socket;  
  53.             mBufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  54.             mStrMSG = "user:"+this.mSocket.getInetAddress()+" come total:" + mClientList.size();  
  55.             sendMessage();  
  56.         }  
  57.         public void run()  
  58.         {  
  59.             //try  
  60.             //{  
  61.                 try {  
  62.                     while ((mStrMSG = mBufferedReader.readLine()) != null)  
  63.                     {  
  64.                         if (mStrMSG.trim().equals("exit"))//当一个客户端退出时  
  65.                         {  
  66.                             mClientList.remove(mSocket);  
  67.                             mBufferedReader.close();  
  68.                             mPrintWriter.close();  
  69.                             mStrMSG = "user:"+this.mSocket.getInetAddress()+" exit total:" + mClientList.size();  
  70.                             mSocket.close();  
  71.                             sendMessage();  
  72.                             break;  
  73.                         }  
  74.                         else  
  75.                         {  
  76.                             mStrMSG = mSocket.getInetAddress() + ":" + mStrMSG;  
  77.                             sendMessage();  
  78.                         }  
  79.                     }  
  80.                 } catch (IOException e) {  
  81.                     // TODO Auto-generated catch block  
  82.                     e.printStackTrace();  
  83.                 }  
  84.         //  }  
  85.         }  
  86.         /** 
  87.          *  发送消息给所有客户端 
  88.          */  
  89.         private void sendMessage() throws IOException  
  90.         {  
  91.             System.out.println(mStrMSG);  
  92.             for (Socket client : mClientList)  
  93.             {  
  94.                 mPrintWriter = new PrintWriter(client.getOutputStream(), true);  
  95.                 mPrintWriter.println(mStrMSG);  
  96.             }  
  97.         }  
  98.     }  
  99. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值