电脑端聊天室小程序,实现方法及部分代码! 希望对大家有所帮助
ChatManager.java
import java.util.Vector; /** * 1、把所有的东西都管理起来 add 2、把一个的人的东西 发给其他所有人 * @author Administrator */ public class ChatManager { // Vector 和 List 都是集合 // Vector线程安全 list线程不安全 速度快 Vector<ChatSocket> list = new Vector<ChatSocket>(); private ChatManager() { }; private static ChatManager manager = new ChatManager(); public static ChatManager getInstance() { return manager; } public void add(ChatSocket chatSocket) { list.add(chatSocket); } /** * 1、接收一个参数 :发送数据的人 * 2、因为在管理器重有一个vector集合 那么就可以把集合中的每一个char线程获取得到 发送数据 * @param socket */ public void publishData(ChatSocket cs, String data) { for (int i = 0; i < list.size(); i++) { if(cs != list.get(i)){ list.get(i).sendData(data); } } } }ChatSocket.java
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; public class ChatSocket extends Thread{ Socket socket; public ChatSocket(Socket socket) { super(); this.socket = socket; } @Override public void run() { readData(); super.run(); } private void readData() { try { InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is, "utf-8"); //可以按行读取 BufferedReader br = new BufferedReader(isr); String line = ""; while((line = br.readLine()) != null){ //读到客户端数据后 转发给其他客户端 ChatManager.getInstance().publishData(this, line); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void sendData(String data){ try { OutputStream os = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8"); BufferedWriter bw = new BufferedWriter(osw); bw.write(data + "\r\n"); bw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }MyServerSocket.java
public class MyServerSocket { public static void main(String[] args) { new SocketListner().start(); System.out.println("服务器已经开启"); } }# SocketListner.java
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class SocketListner extends Thread{ @Override public void run() { try { ServerSocket ss = new ServerSocket(10101); while(true){ Socket socket = ss.accept(); System.out.println("客户端连接成功"); ChatSocket chatSocket = new ChatSocket(socket); chatSocket.start(); //把聊天线程的对象 放到一个管理器的集合中 ChatManager.getInstance().add(chatSocket); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } super.run(); } }
手机端聊天室,在电脑端的基础上才可以运行!