//服務端,這里用PC機會服務端
package com.adventure.socket; 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 MySocketServer { private static final int PORT = 9999; private List<Socket> mList = new ArrayList<Socket>(); private ServerSocket server = null; private ExecutorService mExecutorService = null;//線程池 public MySocketServer(){ try { server = new ServerSocket(PORT); mExecutorService = Executors.newCachedThreadPool();//創建一個線程pool Socket client = null; while(true){ client = server.accept(); mList.add(client); mExecutorService.execute(new ChatService(client));//執行里面的線程 } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { new MySocketServer(); } class ChatService implements Runnable{ private Socket socket; private BufferedReader in = null; private String msg=""; public ChatService(Socket socket){ this.socket = socket; try { in = new BufferedReader(new InputStreamReader(socket.getInputStream())); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { try { while(true){ String content = ""; if((content = in.readLine()) != null){ if(content.equals("exit")){ //如果收到信息為"exit",則向客戶端返回ok,然后關掉socket, msg = "用戶IP:"+socket.getInetAddress() + " 退出后在線用戶數量:"; this.sendmsg("ok"); mList.remove(socket); in.close();socket.close(); System.out.println(msg+ mList.size()); break; } else{ //打印客戶提交過來的其它信息 msg = "客戶端IP:"+socket.getInetAddress() +" 在線用戶數量:"+mList.size()+" " + content+"-"+socket.hashCode(); System.out.println(msg); this.sendmsg(msg); } } } } catch (Exception e) { System.out.println("server 數據讀取異常"); e.printStackTrace(); } } public void sendmsg(String message){ 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(message); } catch (Exception e) { e.printStackTrace(); } } } } }
//android客戶端
package cn.client.kwok; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.Socket; import java.util.Enumeration; import android.app.Activity; import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class Client1Activity extends Activity { /** Called when the activity is first created. */ private EditText content; private Button send; private String msg = ""; private Socket socket; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); content = (EditText) findViewById(R.id.content); send = (Button) findViewById(R.id.button); send.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub msg = content.getText().toString(); runt(); } }); } private void runt(){ new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub chatConnection(); } }).start(); } public String getLocalMacAddress() { WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); info.getIpAddress(); return info.getMacAddress(); } public void getLocalIPAddress(){ try { for(Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces();en.hasMoreElements();){ NetworkInterface intf = en.nextElement(); for(Enumeration<InetAddress> ipAddr = intf.getInetAddresses();ipAddr.hasMoreElements();){ InetAddress inetAddress = ipAddr.nextElement(); String ip = inetAddress.getHostAddress(); Log.i("size", ip+"--"+getLocalMacAddress()); } } } catch (Exception e) { e.printStackTrace(); } } public void chatConnection() { BufferedReader in = null; PrintWriter out = null; try { if(socket == null){ socket = new Socket("192.168.1.109", 9999); Log.i("size","here"); } in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); if (socket.isConnected()) { if (!socket.isOutputShutdown()) { out.println(msg); Log.i("size","client 113 send:"+ msg+" "+socket.hashCode()); } } while (true) { if(in.readLine() != null){ if (in.readLine().equals("ok")) { //out.println("ok"); Log.i("size", "client 113 exit "+socket.hashCode()); in.close(); if(out != null && socket != null){ out.close(); socket.close(); socket = null; } break; } else { Log.i("size","client 113 receive"+ in.readLine()+" "+socket.hashCode()); } } } } catch (Exception e) { e.printStackTrace(); } } }