首页 > 代码库 > Socket 群聊功能
Socket 群聊功能
1、Server端:
拥有一个存放与客户端连接对象的List<socket> 有一个客户端发信息后 遍历List 实现群发功能 代码如下:
1 package com.socket; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 import java.util.ArrayList;10 import java.util.List;11 12 public class MyServer {13 14 public static void main(String[] args) throws Exception {15 ServerSocket ss = new ServerSocket(10002);16 List<Socket> allClient = new ArrayList<>();17 System.out.println("server is starting....");18 while(true){19 Socket s = ss.accept();20 allClient.add(s);21 new Thread(new ServerThread(s, allClient)).start();22 }23 }24 25 }26 class ServerThread implements Runnable{27 private Socket s;28 private List<Socket> allClient;29 30 public ServerThread(Socket s, List<Socket> allClient) {31 super();32 this.s = s;33 this.allClient = allClient;34 }35 36 @Override37 public void run() {38 try {39 System.out.println(s.getInetAddress().getHostAddress()+"上线了...");40 BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));41 String line = null;42 while((line = in.readLine())!=null){43 for(Socket soc:allClient){44 //向其他客户端发信息45 if(!soc.equals(s)){46 PrintWriter pw = new PrintWriter(soc.getOutputStream(),true);47 pw.println(line);48 }49 }50 }51 } catch (IOException e) {52 // TODO Auto-generated catch block53 e.printStackTrace();54 }55 56 }57 58 }
2、客户端:
客户端需要注意的是用户不仅可以输入,还可以随时的接受服务端发来的信息,这就要求读和写分开两个线程来操作代码如下:
1 package com.socket; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.InetAddress; 8 import java.net.Socket; 9 10 public class Client {11 12 public static void main(String[] args) throws IOException, Exception {13 final Socket s = new Socket(InetAddress.getLocalHost(),10002);14 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));15 PrintWriter pw = new PrintWriter(s.getOutputStream(),true);16 String line = null;17 new Thread(new Runnable() {18 @Override19 public void run() {20 try {21 BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));22 String str = null;23 while((str = br.readLine())!=null){24 System.out.println(str);25 }26 } catch (IOException e) {27 // TODO Auto-generated catch block28 e.printStackTrace();29 }30 }31 }).start();32 while ((line = br.readLine())!=null){33 pw.println(line);34 }35 s.close();36 br.close();37 }38 }
Socket 群聊功能
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。