Server:
1 package org.hjw.server; 2 3 import java.io.IOException; 4 5 import java.net.ServerSocket; 6 import java.net.Socket; 7 import java.util.ArrayList; 8 9 public class Server { 10 11 public static ArrayList<Socket> socketList = new ArrayList<Socket>(); 12 13 public static void main(String[] args) throws IOException { 14 15 ServerSocket ss = new ServerSocket(30000); 16 int i=0; 17 while (true) { 18 Socket s = ss.accept(); 19 socketList.add(s); 20 System.out.println("线程:"+i+++"正在运行."); 21 new Thread(new ServerThread(s)).start(); 22 23 } 24 } 25 }
Client:
1 package org.hjw.chatonline; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 6 import java.net.Socket; 7 8 import android.os.Bundle; 9 import android.os.Handler; 10 import android.os.Message; 11 import android.app.Activity; 12 import android.view.Menu; 13 import android.view.View; 14 import android.view.View.OnClickListener; 15 import android.widget.Button; 16 import android.widget.EditText; 17 import android.widget.TextView; 18 19 public class MainActivity extends Activity { 20 21 EditText nickname; 22 EditText input; 23 Button send; 24 TextView show; 25 26 Handler handler; 27 28 ClientThread clientThread; 29 30 @Override 31 protected void onCreate(Bundle savedInstanceState) { 32 super.onCreate(savedInstanceState); 33 setContentView(R.layout.activity_main); 34 35 nickname = (EditText) findViewById(R.id.nickname); 36 input = (EditText) findViewById(R.id.input); 37 send = (Button) findViewById(R.id.send); 38 show = (TextView) findViewById(R.id.show); 39 handler = new Handler() {; 40 @Override 41 public void handleMessage(Message msg) { 42 if (msg.what == 0x123) { 43 44 show.append(" " + msg.obj.toString()); 45 46 } 47 } 48 }; 49 clientThread = new ClientThread(handler); 50 new Thread(clientThread).start(); 51 send.setOnClickListener(new OnClickListener() { 52 53 @Override 54 public void onClick(View v) { 55 try { 56 Message msg = new Message(); 57 msg.what = 0x345; 58 msg.obj = nickname.getText().toString() + ":" 59 + input.getText().toString(); 60 clientThread.revHandler.sendMessage(msg); 61 input.setText(""); 62 } catch (Exception e) { 63 64 } 65 } 66 }); 67 68 } 69 70 @Override 71 public boolean onCreateOptionsMenu(Menu menu) { 72 // Inflate the menu; this adds items to the action bar if it is present. 73 getMenuInflater().inflate(R.menu.main, menu); 74 return true; 75 } 76 77 }
ps:1.Client指定IP地址和端口后,建立与Server网络连接,通过Socket建立通信.
2.Client里有两个Handler ,分别处理服务器传来的消息,回显消息,以及接收UI线程传入的消息,将消息发到服务器.
3.完成了C/S结构的聊天室。