[JAVA]多人聊天室控制台实现,服务端向所有客户端下发消息实现
2013-05-19 18:09
387 查看
把项目分为五个模块:客户端,服务端,写入线程,读出线程,服务端向所有客户端写入线程。
读出线程
写入线程
客户端
服务端
/*
******逸雨清风 出品
*/
读出线程
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.Socket; public class ReadThread extends Thread { Socket socket; String client; public ReadThread(Socket socket,String client) { this.socket = socket; this.client = client; } public void run() { try { String line = ""; BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream())); line = is.readLine(); while (line != null) { System.out.println(client+" : "+line); line = is.readLine(); } is.close(); socket.close(); } catch (Exception e) { System.out.println("Error : "+e); } } }
写入线程
import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class WriteThread extends Thread { Socket socket = null; String client; public WriteThread(Socket socket,String client) { this.socket = socket; this.client = client; } public void run() { try { PrintWriter os = new PrintWriter(socket.getOutputStream()); Scanner scanner = new Scanner(System.in); String readline = scanner.nextLine(); while (readline != null) { os.println(readline); os.flush(); readline = scanner.nextLine(); } os.close(); socket.close(); } catch (Exception e) { System.out.println("Error : "+e); } } }服务端向所有客户端下发消息线程,使用到了集合,socket的集合和printwriter的集合
import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; import java.util.Vector; public class ServerWriteThread extends Thread { Vector<Socket> vector = null; Vector<PrintWriter> oosVector = null; public ServerWriteThread(Vector<Socket> vector) { this.vector = vector; oosVector = new Vector<PrintWriter>(); } public void run() { try { while(true) { String line; Scanner scanner = new Scanner(System.in); line = scanner.nextLine(); if (vector != null) { oosVector.clear(); for (int i=0;i<vector.size();i++) { try { Socket socket = vector.elementAt(i); PrintWriter os = new PrintWriter(socket.getOutputStream()); oosVector.addElement(os); } catch (Exception e) { vector.removeElement(i); } } for (int i=0;i<oosVector.size();i++) { PrintWriter oos = oosVector.elementAt(i); oos.println(line); oos.flush(); } } } } catch (Exception e) { System.out.println("Error :"+e); }finally{ //关闭各个连接 if (oosVector != null) { for (int i=0;i<oosVector.size();i++) { PrintWriter obj = oosVector.remove(i); obj.close(); } } if (vector != null) { for (int i=0;i<vector.size();i++) { Socket obj = vector.remove(i); try { obj.close(); } catch (Exception e2) { System.out.println("socket关闭出现错误 " + e2); } } } } } }
客户端
import java.net.Socket; import java.util.Scanner; public class MultiClient { public static void main(String[] args) //throws Exception { Scanner scanner = new Scanner(System.in); System.out.println("请输入客户端名称"); String ClientName = scanner.next(); try { Socket socket = new Socket("127.0.0.1",5200); Thread read = new ReadThread(socket,ClientName); Thread write = new WriteThread(socket,ClientName); read.start(); write.start(); } catch (Exception e) { System.out.println("Error :" + e); } } }
服务端
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector; public class MultiServer { ServerSocket serverSocket = null; boolean listening = true; int cliennum = 0; Vector<Socket> vector = new Vector<Socket>(); public MultiServer() { try { serverSocket = new ServerSocket(5200); System.out.println("服务端启动"); ServerWriteThread write = new ServerWriteThread(vector); //向所有客户端发送同一消息 write.start(); while (listening) { Socket socket = serverSocket.accept(); cliennum++; vector.addElement(socket); //将收到的socket加入到集合中 System.out.println("接收到 : "+cliennum+" 客户端"); String client = "从客户端["+cliennum+"]:"+"读取"; Thread read = new ReadThread(socket, client); read.start(); } } catch (IOException e) { System.out.println("无法监听到端口"); System.exit(-1); } try { serverSocket.close(); } catch (Exception e) { System.out.println(e.toString()); } } public static void main(String[] args) { new MultiServer(); } }
/*
******逸雨清风 出品
*/
相关文章推荐
- JAVA 网络编程 Socket 详细说明,实现客户端和服务端相互推送消息
- 使用eclipse paho在java端实现MQTT消息的收发(客户端与服务端实例)
- ios消息推送客户端和服务端实现带代码(java)
- Java——Mina 服务端和客户端实现输出HelloWorld
- Java IO——Socket:通过多线程实现多客户端与一个服务端通信
- java socket 实现服务端与客户端------一对多的服务端和客户机
- 基于TCP实现简单的客户端服务端的消息传递
- 基于TCP实现简单的客户端服务端的消息传递(二)
- JAVA作业 sockect编程实现聊天室(一服务器多客户端)
- linux C++ poll实现的聊天室程序 客户端----服务端
- JavaWeb从入门到放弃(9)-实现一个客户端上传文件到服务端
- JAVA SOCKET 服务端/客户端可随时从任意一方发消息的例子
- Java实现UDP之Echo客户端和服务端
- java--实现多个客户端与服务端连接
- 基于UDP实现简单的客户端服务端的消息传递
- Java服务端和安卓客户端对消息的加密
- Java简单实现TCP服务端和客户端通信
- 【Java】Socket+多线程实现控制台聊天室
- java多线程客户端服务端实现加密解密
- 安卓:service通信,信使实现,客户端和服务端及回传消息的完整版