websocket 聊天室 java_java websocket 简单的聊天室

这是一个使用WebSocket实现实时聊天室的应用。代码中包含了用户登录、离开、发送消息的处理,以及消息推送给所有在线用户的功能。用户通过URL参数传递名字,服务器端对名字进行解码并存储,当用户发送消息时,会附带用户名、消息内容和时间戳。
摘要由CSDN通过智能技术生成

packagesocket_web;importjava.io.UnsupportedEncodingException;importjava.net.URLDecoder;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;importjavax.websocket.OnClose;importjavax.websocket.OnMessage;importjavax.websocket.OnOpen;importjavax.websocket.Session;importjavax.websocket.server.ServerEndpoint;

@ServerEndpoint("/ChatRoomForWebSocket")public classChatRoomForWebSocket {public static List userNames = new ArrayList();public static List sessions = new ArrayList();

@OnOpenpublic voidopen(Session session) {try{

String userName=session.getQueryString();

userName= userName.split("=")[1];

userName= URLDecoder.decode(userName, "utf-8");if(userNames.contains(userName)) {

session.getBasicRemote().sendText("error");

}else{

userNames.add(userName);

sessions.add(session);

String msg= "{\"type\":0, \"data\":[" + jsonName() + "]}";

pushMsg(msg);

}

System.out.println(userName+ " 登入了");

}catch(Exception e) {

e.printStackTrace();

}

}

@OnClosepublic voidclose(Session session) {try{

String userName=session.getQueryString();

userName= userName.split("=")[1];

userName= URLDecoder.decode(userName, "utf-8");if(sessions.contains(session)){

userNames.remove(userName);

sessions.remove(session);

}

String msg= "{\"type\":0, \"data\":[" + jsonName() + "]}";

pushMsg(msg);

}catch(Exception e) {

System.out.println("关闭失败");

}

}

@OnMessagepublic voidmessage(Session session, String msg) {try{

String userName=session.getQueryString();

userName= userName.split("=")[1];

userName= URLDecoder.decode(userName, "utf-8");

Date date= newDate();

SimpleDateFormat timeFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String time=timeFormat.format(date);

msg= "{\"type\":1, \"data\":{\"name\":\"" + userName + "\", \"msg\":\"" + msg + "\",\"time\":\"" +time+ "\" }}";

pushMsg(msg);

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

}

}//推送消息给所有用户

public static voidpushMsg(String msg) {try{for(Session session : sessions) {

session.getBasicRemote().sendText(msg);

}

}catch(Exception e) {

System.out.println("发送失败");

}

}//拼接所有用户名

public staticString jsonName() {

StringBuilder nameStr= new StringBuilder(100);for(String name : userNames) {

nameStr.append("{\"name\":\"" + name + "\"},");

}

nameStr.delete(nameStr.length()- 1, nameStr.length());returnnameStr.toString();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值