Java Socket和多线程实现多人聊天
程序员文章站
2022-04-15 23:33:15
前面写了客户端与服务端在线聊天 但是只可以点对点的聊天 今天多人在线它来了 它来了 下面是源代码 服务端有个工具类Chat(这个命名忽略一下~) 客户端代码完全一样 想要多个客户端聊天 就多复制粘贴 多运行几个客户 一如既往的不写注释 而且代码很乱 不过很简洁 写的不好见谅//这是服务端 import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socke...
前面写了客户端与服务端在线聊天 但是只可以点对点的聊天 今天多人在线它来了 它来了 下面是源代码 服务端有个工具类Chat(这个命名忽略一下~) 客户端代码完全一样 想要多个客户端聊天 就多复制粘贴 多运行几个客户 一如既往的不写注释 而且代码很乱 不过很简洁 写的不好见谅
//这是服务端
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
while (true){
Socket s = ss.accept();
new Thread(()->{
Chat.theUser.put(s.getRemoteSocketAddress() + "",s);
Chat.people();
}).start();
new Thread(()->{
while (true){
try {
InputStream is = s.getInputStream();
byte[] arr = new byte[1024];
int len = is.read(arr);
Chat.outPut(arr,len,s.getRemoteSocketAddress() + "");
}catch (Exception e){}
}
}).start();
// new Thread(()->{ //检测用户是否掉线没完成。。。
// try {
// while (true){
// s.sendUrgentData(0xFF);
// System.out.println(1);
// Thread.sleep(3000);
// }
// }catch (Exception e){
// System.out.println(2);
// Chat.theUser.remove(s.getRemoteSocketAddress() + "");
// Chat.people();
// }
// }).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//这是服务端的工具类
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
public class Chat {
public static Map<String, Socket> theUser = new HashMap<>();
public static void outPut(byte[] b, int len ,String user){
for (String s : theUser.keySet()) {
Socket socket = theUser.get(s);
if (!user.equals(s)){
try {
OutputStream os = socket.getOutputStream();
String data = s + "说:" + new String(b, 0, len);
os.write(data.getBytes());
} catch (IOException e) {}
}
}
}
public static void people(){
System.out.println("当前在线人数:" + theUser.size());
}
}
//这是客户端
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args){//客户端 就是多创建几个client文件
Scanner sc = new Scanner(System.in);
try {
Socket s = new Socket("127.0.0.1",8888);
new Thread(()->{
while(true) {
try {
OutputStream os = s.getOutputStream();
os.write(sc.nextLine().getBytes());
} catch (IOException e) {}
}
}).start();
new Thread(()->{
while (true){
try {
InputStream is = s.getInputStream();
byte[] arr = new byte[1024];
int len = is.read(arr);
System.out.println( new String(arr, 0, len));
} catch (IOException e) {}
}
}).start();
}catch (Exception e){}
}
}
本文地址:https://blog.csdn.net/YMFYZY/article/details/107331584