java 简单的聊天工具 (带界面的)

新的编辑

首先建立一个工程 导入数据库驱动

工程图 [外链图片转存中…(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 接受消息并放置到文本框中
				
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值