ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:106.02KB ,
资源ID:18270317      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18270317.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(聊天室Java课程设计Word下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

聊天室Java课程设计Word下载.docx

1、3.系统详细设计3.1数据库设计:用户表User:列明类型长度是否为主键描述Usernamevarchar32是用户名Nickname昵称Password密码Genderchar1性别:缺省0 男Ageint4年龄City城市Online是否在线:缺省0 离线好友表Friend:Id8标识idusername外键Friendname用户名(好友)3.2页面设计3.2.1:登录页面:用户在登录页面,可以输入用户名和密码进入系统,当然,若用户输入的用户名和密码不正确,系统会给出提示,新用户也可以通过该页面链接到注册页面进行注册,然后回到该页面进行登录3.2.2:注册页面: 用户在登录页面可以直接登

2、录系统,若是新用户没有登录信息,则会被引导到该页面进行注册,注册新用户时,需要安装一定的规则输入用户信息,有必填项,以及相应的验证。3.2.3,登录成功后的用户主页面: 用户登录成功之后,在用户的主界面会显示出用户的好友列表等信息,同时也会显示出该用户的好友是否在线等信息。右键单击用户:搜索用户,并可以通过该页面添加好友,页面如下: 查看资料: 点击聊天室,可以实现群聊:3.2.4、服务器端代码: Server.java package mainserver;import java.io.IOException;import .ServerSocket;import .Socket;impor

3、t java.util.HashMap;import java.util.Map;/* * 服务器主线程,负责接收客户端连接,并开启相应线程 响应 * * 服务器的事务: 0,主线程,负责接收客户端连接,并开启相应线程 响应登陆用户请求 * 1,定时检测连接状态,并修改相应的用户状态,如果连接关闭(非正常关闭,例如 网络故障导致;而登陆用户正常退出由子线程负责处理状态的修改。),则 * 将相应用户的状态设为未登陆,以保证同一时刻一个用户只能 登陆一次。 PS:由于主线程无法很好的监控各套接字的状态,因此1该为在子线程中处理 * author Administrator */public cla

4、ss Server /* * 服务器状态: true:开启 false:关闭 private boolean running; private static final int SERVER_PORT = 9999; public static Map connections = new HashMap(); ServerSocket serverSocket; * 服务器参数初始化 private void init() public Server() * 服务器开启 public void start() init(); try serverSocket = new ServerSocke

5、t(SERVER_PORT); catch (IOException e) System.out.println(ServerSocket建立失败); e.printStackTrace(); return; startServer(); while (running) Socket socket = null; try System.out.println(Listenning. . socket = serverSocket.accept(); System.out.println(socket.getRemoteSocketAddress(); new ServiceHandler(so

6、cket).start(); catch (IOException e) e.printStackTrace(); public void closeServer() running = false; System.exit(0); private void startServer() running = true; public boolean isRunning() return running;ServiceHandler.javaimport java.io.BufferedReader;import java.io.InputStreamReader;import java.io.O

7、utputStream;import java.util.Arrays;import java.util.Iterator;import java.util.List;import messages.AddFriend;import messages.DelFriend;import messages.Friends;import messages.Info;import messages.Login;import messages.MessageEnd;import messages.Regist;import messages.SearchFriend;import messages.Se

8、nd;import messages.Update;import dao.Friend;import dao.FriendDAO;import dao.User;import dao.UserDAO; * 处理单个客户端请求的线程 如果socket读取或发送数据失败,按用户退出登陆处理public class ServiceHandler extends Thread private Socket socket; private BufferedReader in; private OutputStream out; private boolean isOK; private String c

9、urrentUser; public ServiceHandler(Socket socket) this.socket = socket; isOK = true; out = socket.getOutputStream(); isOK = false; in = new BufferedReader(new InputStreamReader(socket .getInputStream(); * 向客户端发送数据 如果发送失败,修改用户状态为未登录 * param msg public synchronized void send(String msg) if (!isOK) send

10、: + msg); / ShowErrorMsg.display(msg); out.write(msg.getBytes(); out.flush(); userQuit(); private synchronized String read() String tmp = null; tmp = in.readLine(); if (tmp != null) return tmp; return null; * 发送或接收数据失败,修改用户状态 * param b private void changeUserState(boolean b) / 设定为上线 if (b) synchroni

11、zed (Server.connections) Server.connections.put(this.currentUser, this); else Server.connections.remove(this.currentUser); new UserDAO().setOnline(this.currentUser, b); * 如果读取失败,修改用户状态为未登录 从客户端读取数据 * param socket private String receiveTitle() StringBuffer buffer = new StringBuffer(); return buffer.t

12、oString(); if (tmp = in.readLine() ! buffer.append(tmp); return buffer.toString(); private void userQuit() System.out.println(失去一个连接。 isOK = false; changeUserState(false); public void run() while (isOK) String title = this.receiveTitle(); if (title != null & title.length()!=0) if (title.equals(Login

13、.title) System.out.println(get: + Login.title); System.out.println(this.read(); loginHandle(); else if (title.equals(AddFriend.title) this.read(); addFriendHandler(); else if (title.equals(Friends.title) friendsHandler(); else if (title.equals(Regist.title) registHandler(); else if (title.equals(Sea

14、rchFriend.title) searchFriendHandler(); else if (title.equals(Send.title) int id = Integer.parseInt(this.read(); sendHandler(id); else if (title.equals(Update.title) updateHandler(); else if (title.equals(Info.title) infoHandler(); else if (title.equals(DelFriend.title) delFriendHandler(); else noth

15、ing catched socket.close(); private void delFriendHandler() String user = this.read(); this.read(); new FriendDAO().delete(user, this.currentUser); this.send(success + MessageEnd.end + DelFriend.title + MessageEnd.end + MessageEnd.end); private void infoHandler() String username = this.read(); User

16、result = new UserDAO().getUserInfo(username); StringBuffer reply = new StringBuffer(); reply.append( + MessageEnd.end + Info.title + MessageEnd.end); reply.append(result.getAge() + MessageEnd.end + result.getCity() reply.append(result.getGender() + MessageEnd.end + result.getNickName() reply.append(

17、result.getPassWord() + MessageEnd.end + result.getUserName() + MessageEnd.end); reply.append(MessageEnd.end); this.send(reply.toString(); private void updateHandler() User user = new User(); user.setUserName(this.currentUser); user.setNickName(this.read(); user.setPassWord(this.read(); user.setCity(

18、this.read(); user.setAge(Integer.parseInt(this.read(); user.setGender(this.read().charAt(0); new UserDAO().update(user); + MessageEnd.end + Update.title + MessageEnd.end + Messa geEnd.end); private void sendHandler(int id) String target = this.read(); String content = this.read(); if (Server.connect

19、ions.containsKey(target) ServiceHandler hand = Server.connections.get(target);connection: + target + got if (hand !got inside hand.send( + MessageEnd.end + send + MessageEnd.end + (id) + MessageEnd.end + this.currentUser + MessageEnd.end + content.replace(n, #) + MessageEnd.end + MessageEnd.end); pr

20、ivate void searchFriendHandler() String name = this.read(); String value = this.read(); buffer.append( + MessageEnd.end); buffer.append(SearchFriend.title + MessageEnd.end); List result = new UserDAO().getUserFullName(value); for (int index = 0; index result.size(); index+) buffer.append(result.get(

21、index) + MessageEnd.end); buffer.append(MessageEnd.end); this.send(buffer.toString(); private void registHandler() user.setUserName(this.read(); System.out.println(user.getUserName() + read System.out.println(user.getPassWord() + System.out.println(user.getNickName() + System.out.println(user.getCity() + user.setOnline(false); if (new UserDAO().insertUser(user)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1