新的编辑
首先建立一个工程 导入数据库驱动
工程图 [外链图片转存中…(img-L5122MFE-1653136979314)]
[外链图片转存中…(img-nhoCvbQL-1653136979315)]
解释一下 entity包是 bin目录 Message包下 和 User包下 是对象相关的操作
[外链图片转存中…(img-zaCihPOo-1653136979315)]
Message
package com.FakeQQ.entity;
import java.util.Date;
public class Message {
//需要序列化发送,所以要继承Serializable接口
private int id;
private String content;
private int sender;
private int receiver;
private Date sendTime;
private Date receiveTime;
private int state;
private int ip;
public int getIp() {
return ip;
}
public void setIp(int ip) {
this.ip = ip;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getSender() {
return sender;
}
public void setSender(int sender) {
this.sender = sender;
}
public int getReceiver() {
return receiver;
}
public void setReceiver(int receiver) {
this.receiver = receiver;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public Date getReceiveTime() {
return receiveTime;
}
public void setReceiveTime(Date receiveTime) {
this.receiveTime = receiveTime;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
}
User
package com.FakeQQ.entity;
import java.util.Date;
public class User {
//这叫实体bin
private int qqNumber;
private String qqName;
private String qqPassword;
private Date registTime; //注册时间
private String sex;
private String introduce; //个人简介
private String ip;
public int getQqNumber() {
return qqNumber;
}
public void setQqNumber(int qqNumber) {
this.qqNumber = qqNumber;
}
public String getQqName() {
return qqName;
}
public void setQqName(String qqName) {
this.qqName = qqName;
}
public String getQqPassword() {
return qqPassword;
}
public void setQqPassword(String qqPassword) {
this.qqPassword = qqPassword;
}
public Date getRegistTime() {
return registTime;
}
public void setRegistTime(Date registTime) {
this.registTime = registTime;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getIntroduce() {
return introduce;
}
public void setIntroduce(String introduce) {
this.introduce = introduce;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
}
[外链图片转存中…(img-GKOXhiQ8-1653136979315)]
MessageDaoImpl.java
package com.FakeQQ.Message.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import com.FakeQQ.entity.Message;
import com.FakeQQ.util.ConnectionUtil;
public class MessageDaoImpl {
public int SaveMessage(Message message) {
Connection con=null;
PreparedStatement pstm=null;
int key=0;
try{
con=ConnectionUtil.getCon();
pstm=con.prepareStatement(
"insert into message(content,sender,receiver,"
+ "sendTime,state)values(?,?,?,?,?)",
Statement.RETURN_GENERATED_KEYS);
pstm.setString(1, message.getContent());//
pstm.setInt(2, message.getSender());
pstm.setInt(3, message.getReceiver());
pstm.setString(4, message.getSendTime().toLocaleString());
pstm.setInt(5, message.getState());
pstm.executeUpdate();
ResultSet rs=pstm.getGeneratedKeys();
if(rs.next())
key = rs.getInt(1);
return key;
} catch (Exception e) {
e.printStackTrace();
return 0;
// TODO: handle exception
}finally{
ConnectionUtil.closeCon(null, pstm, con);
}
}
}
ClientThread.java
package com.FakeQQ.Message.service;
import java.io.OutputStream;
import java.net.Socket;
import com.FakeQQ.entity.Message;
import com.FakeQQ.util.SeralizableUtil;
public class ClientThread implements Runnable {
Message message;
String ip;
public ClientThread(Message message,String ip) {
this.message=message;
this.ip=ip;
}
@Override
public void run() {
try {
Socket socket = new Socket(ip,8888);
OutputStream os = socket.getOutputStream();
byte cache[]= SeralizableUtil.SerializableMessage(message);
os.write(cache);
os.flush();
os.close();
System.out.println(cache.length);
//socket.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
MessageServiceImpl.java
package com.FakeQQ.Message.service;
import com.FakeQQ.Message.dao.MessageDaoImpl;
import com.FakeQQ.entity.Message;
public class MessageServiceImpl {
public int sendMessage(Message msg){
MessageDaoImpl messageDaoImpl=new MessageDaoImpl();
return messageDaoImpl.SaveMessage(msg);
}
}
ServerThread.java
package com.FakeQQ.Message.service;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Iterator;
import com.FakeQQ.Message.view.MessageFrame;
import com.FakeQQ.entity.Message;
import com.FakeQQ.user.view.MainFrame;
import com.FakeQQ.util.SeralizableUtil;
import com.FakeQQ.util.SerializableUtilRe;
public class ServerThread implements Runnable {
MainFrame mainFrame;
public ServerThread(MainFrame mainFrame) {
this.mainFrame=mainFrame;
}
@Override
public void run() {
try {
ServerSocket server = new ServerSocket(8888);
while(true){
Socket socket = server.accept();
InputStream is = socket.getInputStream();
System.out.println("ServerThread已开启");
//System.out.println(is);
//if(true) {
System.out.println(is.available());
byte[] bytes = new byte[is.available()];
is.read(bytes);
//System.out.println(bytes.length);
Message message = SerializableUtilRe.SerializableMessageRe(bytes);
System.out.println(message==null);
System.out.println(message.getContent());
is.close();
System.out.println(message.getSender());
System.out.println(message.getContent());
// TODO 接受消息并放置到文本框中