上一篇 java socket编程(2)——利用socket实现聊天之单聊
中我们讲到如何使用socket让客户端和客户端之间传递消息,实现一对一的聊天,接下来我将写出如何让服务器建立客户端与客户端之间的一对多通讯。
还是在原有的代码上加以修改,增加功能。
1,修改实体类(服务器端和客户端的实体类是一样的)
1,UserGroupBean 聊天群表
public class UserGroupBean implements Serializable {
private static final long serialVersionUID = 3L;
private int groupId;//群id
private int userId;//用户id
private int groupNumberByMax;//总人数
private int groupNumberByCurrent;//当前人数
private int groupType;//群类型,朋友,家人,同事
private int groupUserType;//当前用户在群里面的角色,管理员-2,创建者-1,普通人等级:1,2,3,4,5
//省略get、set方法
}
2,MessageBean 消息表修改,增加聊天类型,是单聊还是群聊的标识
public class MessageBean implements Serializable {
private static final long serialVersionUID = 1L;
private long messageId;// 消息id
private long groupId;// 群id
private int chatStyle;//0,普通消息;1,群消息;2,讨论组消息;3,系统推送消息;4,好友通知消息
private int chatType;// 消息类型;1,文本;2,图片;3,小视频;4,文件;5,地理位置;6,语音;7,视频通话
private String content;// 文本消息内容
private String errorMsg;// 错误信息
private int errorCode;// 错误代码
private int userId;//用户id
private int friendId;//目标好友id
private MessageFileBean chatFile;// 消息附件
//省略get、set方法
}
3, UserInfoBean 用户信息表,加入该用户所拥有的群集合
public class UserInfoBean implements Serializable {
private static final long serialVersionUID = 2L;
private int userId;// 用户id
private String userName;// 用户名
private String likeName;// 昵称
private String userPwd;// 用户密码
private String userIcon;// 用户头像
private List<UserGroupBean> groupList;//当前用户所拥有的群
//省略get、set方法
}
2,服务器增加逻辑
1,UserData 添加模拟数据
public class UserData {
/**
* 模拟数据库的用户信息,这里创建id不同的用户信息
*
* @param userId
* @return
*/
public static UserInfoBean getUserInfoBean(int userId) {
UserInfoBean userInfoBean = new UserInfoBean();
userInfoBean.setUserIcon("用户头像");
userInfoBean.setUserId(userId);
userInfoBean.setUserName("admin");
userInfoBean.setUserPwd("123123132a");
userInfoBean.setGroupList(getUserGroup());
return userInfoBean;
}
/**每个用户模拟两个群
* @return
*/
private static List<UserGroupBean> getUserGroup() {
List<UserGroupBean> list = new ArrayList<>();
for (int i = 1; i <= 2; i++) {
UserGroupBean userGroupBean = new UserGroupBean();
userGroupBean.setGroupId(i);
userGroupBean.setGroupNumberByMax(500);
userGroupBean.setGroupNumberByCurrent(20);
userGroupBean.setGroupType(i);
userGroupBean.setGroupUserType(-1);
list.add(userGroupBean);
}
return list;
}
}
2,ChatServer ,修改聊天服务的发送信息逻辑
public class