Java聊天室 IO流 Socket流 GUI界面 枚举与包装消息内容代码及详解(User里存放的是将需要传递的内容整体打包为一个对象 然后分开读取 Net里存放的是服务端的消息类型枚举 根据消息类型进行分类型的读取 )
MsgTypeConfig
package SanWa.Net;
public enum MsgTypeConfig {
PRIVATE_MSG, 私聊枚举类型
ONLINE_LIST1, 隐身上线的查询在线列表枚举类型
SHANGXIAN, 上下线枚举类型
WENJIAN, 发送文件枚举类型
FANKUI,接受或拒绝消息反馈枚举类型
PUBLIC_MSG,公聊枚举类型
ONLINE_MSG,隐身上线枚举类型
ONLINE_LIST,获取在线列表
EXIT_MSG;下线功能
}
User
package SanWa.Net;
import java.io.Serializable;
import java.net.Socket;
import java.util.HashMap;
public class User implements Serializable {
static final long serialVersionUID = 456789L;
private String username;
private String userSend;
private String content;
private MsgTypeConfig msgType;
private long time;
private HashMap<String, Socket> hm;
private String fileName;
private long fileLength;
private byte fileData[];
public User(String username, String userSend, MsgTypeConfig msgType, long time, String fileName, long fileLength, byte[] fileData) {
this.username = username;
this.userSend = userSend;
this.msgType = msgType;
this.time = time;
this.fileName = fileName;
this.fileLength = fileLength;
this.fileData = fileData;
}
public User(String username, String content, MsgTypeConfig msgType, long time, HashMap<String, Socket> hm) {
this.username = username;
this.content = content;
this.msgType = msgType;
this.time = time;
this.hm = hm;
}
public User(String username, String content, MsgTypeConfig msgType, long time) {
this.username = username;
this.content = content;
this.msgType = msgType;
this.time = time;
}
public User(String userSend, String username, String content, MsgTypeConfig msgType, long time) {
this.userSend = userSend;
this.username = username;
this.content = content;
this.msgType = msgType;
this.time = time;
}
public User() {
}
public String getFileName() {
return fileName;
}
public long getFileLength() {
return fileLength;
}
public byte[] getFileData() {
return fileData;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", userSend='" + userSend + '\'' +
", content='" + content + '\'' +
", msgType=" + msgType +
", time=" + time +
", hm=" + hm +
'}';
}
public String getUserSend() {
return userSend;
}
public HashMap<String, Socket> getHm() {
return hm;
}
public MsgTypeConfig getMsgType() {
return msgType;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
}
- static final long serialVersionUID = 456789L; 固定ObjectInputStream的种子 不然读取会混乱
- private String username; 当前客户端的名字
- private String userSend; 要发送消息的人名
- private String content; 发送的内容
- private MsgTypeConfig msgType; 消息类型
- private long time; 时间
- private HashMap<String, Socket> hm; 存储着服务器在线用户的hashmap
- private String fileName; 发送文件时的文件路径
- private long fileLength;发送文件时的文件长度
- private byte fileData[];发送文件时的存储文件数据的字节数组