Android Socket demo


服务器端(电脑端):

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;  
  
  
public class Main {  
    private static final int PORT = 10000;  
    private List<Socket> mList = new ArrayList<Socket>();  
    private ServerSocket server = null;  
    private ExecutorService mExecutorService = null; //thread pool   
      
    public static void main(String[] args) {  
        new Main();  
    }  
    public Main() {  
        try {  
            server = new ServerSocket(PORT);  
            mExecutorService = Executors.newCachedThreadPool();  //create a thread pool   
            System.out.print("server start ...");  
            Socket client = null;  
            while(true) {  
                client = server.accept();  
                mList.add(client);  
                mExecutorService.execute(new Service(client)); //start a new thread to handle the connection   
            }  
        }catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
    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()+this.socket.getPort()+"come toal:"  
                        +mList.size();  
                    this.sendmsg();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
                  
            }  
  
            @Override  
            public void run() {  
                // TODO Auto-generated method stub   
                try {  
                    while(true) {  
                        if((msg = in.readLine())!= null) {  
                            if(msg.equals("exit")) {  
                                System.out.println("ssssssss");  
                                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 e) {  
                    e.printStackTrace();  
                }  
            }  
            
           public void sendmsg() {  
               System.out.println(msg);  
               int num =mList.size();  
               for (int index = 0; index < num; index ++) {  
                   Socket mSocket = mList.get(index);  
                   PrintWriter pout = null;  
                   try {  
                       pout = new PrintWriter(new BufferedWriter(  
                               new OutputStreamWriter(mSocket.getOutputStream())),true);  
                       pout.println(msg);  
                   }catch (IOException e) {  
                       e.printStackTrace();  
                   }  
               }  
           }  
        }      
}  



客户端(Android端):

public class SocketClient 
{ 
    private Socket socket; 
    private InputStream mInputStream;                
    private PrintWriter mPrintWriter; 
    private static final String SERVER_IP   = "192.168.1.24"; 
    private static final int    SERVER_PORT = 6000; 
     
    public SocketClient() 
    { 
 
    } 
     
    public boolean connection() 
    { 
        boolean bRet = false; 
        try 
        { 
            //创建一个客户端连接 
            InetAddress ia = InetAddress.getByName(SERVER_IP); 
            socket = new Socket(ia, SERVER_PORT); 
             
            //获取这个客户端连接SOCKET的输入输出 
            mPrintWriter = new PrintWriter(socket.getOutputStream(), true); 
            mInputStream = socket.getInputStream(); 
             
            bRet = true; 
        } catch (Exception e) 
        { 
            // TODO: handle exception 
        } 
             
        return bRet; 
    } 
     
    //发送消息 
    public void sendMsg(String msg) 
    { 
        mPrintWriter.print(msg); 
        mPrintWriter.flush(); 
    } 
     
    //读取消息 
    public String readMsg() 
    { 
        String msgString = ""; 
        try 
        { 
            byte buffer[] = new byte[1024]; 
             
            int reCount = mInputStream.read(buffer); 
             
            msgString = EncodingUtils.getString(buffer, "GB2312"); 
             
        } catch (Exception e) 
        { 
            // TODO: handle exception 
        } 
         
        return msgString; 
    } 
     
     
    public void close() 
    { 
        try 
        { 
            socket.close(); 
        } catch (Exception e) 
        { 
            // TODO: handle exception 
        } 
    } 
} 

private android.view.View.OnClickListener btnClickListener = new android.view.View.OnClickListener() 
    { 
         
        @Override 
        public void onClick(View v) 
        { 
            int id = v.getId(); 
            switch (id) 
            { 
            case R.id.btn: 
            { 
                SocketClient socketClient = new SocketClient(); 
                socketClient.connection(); 
                socketClient.sendMsg("123"); 
                socketClient.sendMsg("123"); 
                socketClient.sendMsg("123"); 
                socketClient.sendMsg("123"); 
                String r = socketClient.readMsg(); 
                socketClient.close(); 
                Toast.makeText(SocketActivity.this, r, Toast.LENGTH_LONG).show(); 
            } 
                break; 
            case R.id.btn_server: 
            { 
                SocketServer socketServer = new SocketServer(); 
                socketServer.startServer(); 
                socketServer.recv(); 
                socketServer.close(); 
            } 
                break; 
            default: 
                break; 
            } 
        } 
    }; 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值