java课程设计--WeTalk(201521123076)
2024-09-01 00:00:15
在线群聊系统
1,团队课程设计博客链接
http://www.cnblogs.com/slickghost/p/7018105.html
个人负责模块或任务说明
负责模块:总体设计及主要聊天功能实现
2,自己的代码提交记录截图
3,自己负责模块或任务详细说明
服务器和客户端之间的各种请求,我通过自定义的标志来确认,如验证用户,首先,客户端会先发送”login”告诉服务器,这是一个登入请求。服务器接收到这个请求,就会等待接收一个User对象(通过序列化传输,把信息都放在这个对象内,更方便)提取用户名密码进行验证,通过数据库验证返回结果,再把结果告诉客户端,客户端收到true后,便告知用户登入成功。
//验证用户
public boolean sendUserToServerLogin(User user) throws IOException, ClassNotFoundException{
objectout.writeObject("login");
objectout.flush();
objectout.writeObject(user);
objectout.flush();
//输入对象, 一定要flush()
//objectout.close();
//验证结果
while(true){
String msg = objectin.readObject().toString();
if(msg.equals("true")){
return true;
}
else {
socket.close();
return false;
}
}
}
//1.登入请求,接收到一个User对象,验证其用户名和密码
if(mgs.equals("login")){
if((obj = objectin.readObject()) !=null){
User user = (User)obj;
if(serverUserDaoJDBCImpl.checkUser(user)){
ServerRunLog.log.info("User("+
user.getNumber()+") Login." );
objectout.writeObject("true");
}
else{
objectout.writeObject("false");
}
}
}
public boolean checkUser(User user) {
if(loadUser(user.getNumber()).getNumber() == user.getNumber() &&
loadUser(user.getNumber()).getPassword().equals(user.getPassword()))
return true;
return false;
}
public User loadUser(int number) {
Connection conn = null;
PreparedStatement pstat = null;
String sql = "select * from userData where number = ?";
ResultSet rs = null;
try {
conn = JDBCUtil.getConnection();
pstat = conn.prepareStatement(sql);
pstat.setInt(1, number);
rs = pstat.executeQuery();
while(rs.next()){
String netName = rs.getString("netName");
String password = rs.getString("password");
String sign=rs.getString("sign");
String telephone=rs.getString("telephone");
int isVip = rs.getInt("isVip");
User user = new User(number,password,netName,sign,telephone,isVip);
return user;
}
}catch (SQLException sqle) {
sqle.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtil.realeaseAll(null,pstat, conn);
}
return new User();
}
其他请求类似。
接下来看一下主要的聊天转发功能:某个加入群聊,服务器将其加入线程列表,其发送消息时,服务器会将消息转发到线程列表内的所有用户。
if(e.getSource()==chatJFrame.getSendButton()){
String msg = chatJFrame.getEditorTextArea1().getText();
try {
objectout.writeObject("message");
objectout.flush();
objectout.writeObject(msg);
objectout.flush();
//System.out.println(msg);
chatJFrame.getEditorTextArea1().setText("");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//6.普通信息
if(mgs.equals("message")){
String groupMsg = user.getNetName() + ": " + objectin.readObject().toString();
for (int i = 0; i < mainThread.onLineUserList.size(); i++) {
mainThread.onLineUserList.get(i).objectout.writeObject("groupMessage");
mainThread.onLineUserList.get(i).objectout.flush();
mainThread.onLineUserList.get(i).objectout.writeObject(groupMsg + "\n");
mainThread.onLineUserList.get(i).objectout.flush();
}
4,课程设计感想
作为一个小组组长,本次课程设计让我收获了许多东西。 与第一次一个人做C语言课设不同的是,这次需要根据组员的实际情况安排具体任务,其实这本身就是一个难度所在。整个过程中也需要协调所有组员的工作。好在从结果来看,分配给大家的任务都能够大部分完成。第一次体验到团队协作的感觉。
本次课设不足:最初的设计还是欠缺深度思考,导致在写的过程中两次改变整体包结构;任务安排上还不是很合理;没有实现最初设计的文件共享模块;
通过本次课设,每个组员都能强化自己所做的那一部分知识,整体完成后一起过了一遍,了解了整体流程;可能是效率不高,时间不够,只实现了最基本的功能,当初预想的一些功能慢慢地删除,不过实现最基本的通信之后,在这基础上添加后续功能难度不是很大。
最新文章
- iOS 按钮上的标题设置向左向右对齐的方法
- JS --- 原型模式
- Ninject学习笔记<;二>;
- The specified child already has a parent错误
- android学习笔记---发送状态栏通知
- PHP实现对MongoDB的基础操作
- pcl1.7.2_vs2013_x64工程配置
- linux基本命令-注销、关机、重起
- Spring BeanFacoty doCreateBean方法分析
- SoapUI破解及安装教程
- C++之标准库map
- 代码详解:TensorFlow Core带你探索深度神经网络“黑匣子”
- PHP7&;Swoole源码安装
- jmeter4.0安装记录
- Django -- 部署Django 静态文件不能获取
- SQL中的float类型的数据
- PAC 自动代理
- lightoj 1205 数位dp
- C++快速开发样本工程的建立--编写常用组件
- 20155233 2016-2017-2 《Java程序设计》第9周学习总结