网络课程设计书(编辑修改稿)内容摘要:

ds Thread 接收来自服务器的信息 20 开 始用 B u f f e r R e a d e r I n p u t S t r e a m R e a d e r( S . g e t I n p u t S t r e a m ( ) ) 实 例 化 数 据流R u n n i n g。 R e a d e r . C l o s e ( )N结 束M s g = r e a d e r . r e a d l i n e不 为 空Y信 息 头 部 关 键字 为 [ M S G ]Y提 取 s e n d e r , l i s t e n e r , 内容 调 用 s t o r e M s g 发 送 到 显示 对 话 框Y N信 息 头 部 关 键字 为 [ F I L E ]提 取 s e n d e r , l i s t e n e r , 内 容 调用 S t o r e M s g 发 送 到 显 示 框 , 调用 g e t f i l e 接 受 , 缓 存 文 件Y信 息 头 部 关 键字 为 [ S U C C E S S ]N设 置 连 接 状 态 为 t r u e ,修 改 数 据 库 登 陆 成 功Y信 息 头 部 关 键字 为 [ F U S E R ]N显 示 好 友 上 的 信 息Y信 息 头 部 关 键字 为 [ N O U S E R ]N用 户 不 存 在Y信 息 头 部 关 键字 为 [ H A V I N G ]N显 示 已 经 为 好 友Y信 息 头 部 关 键字 为 [ S H A V E ]N添 加 好 友 成 功Y信 息 头 部 关 键字 为 [ U S E R ]N增 加 用 户 列 表 刷 新Y信 息 头 部 关 键字 为 [ F I L S ]N增 加 好 友 列 表 刷 新Y退 出N 客户端接收信息流程图 21 ClientFilesender()客户端文件信息的发送 Class ClientFileListener()客户端文件信息的接收 22 3)服务器端 MainSever() 初始化服务器套接口 server, server2,调 accept()函数进行阻塞侦听,如果有客户端请求,建立连接 socket2 = ()。 socket = ()。 为每个新建连接的用户新建一个 Chat_Thread()线程,并添加到线程池,用 bMan 进行统一管理。 Chat_Thread()流程 如下图所示 23 开始加载数据库驱动程序driver,并将socket的输入流放入BufferReader缓冲区,即reader读者Is running。 关闭所有链接N结束Reader.readerlline()。 =nullY信息头部关键字[EXIT]。 N信息头部关键字[COO]。 N 退出Y调用msgconnect()新用户登录,注册Y信息头部关键字[LONGING]。 N获取用户名,更新数据库reflash()Y信息头部关键字[FRIEND]。 NY调用msgfriend()子函数,查找数据库。 ret.next()自当前线程发送[NOUSER],用户不存在I fRset.Next()向当前线程发送[HAVEI],已经存在I f自当前线程发送[SAAVE],更新数据库I f信息头部关键字[CHANGE]。 N调用msgchange()修改备注姓名,更新数据库Y信息头部关键字[UPDATE]。 N调用msgupdate()与数据库建立连接,更新用户属性信息,更新数据库Y信息头部关键字[MSG]。 N以主机名为关键字,查找用户套接口,发送信息Y信息头部关键字[MSG]。 NN提取senderlistener,调用getlife接收文字,sendfile发送文件Y Chat_Thread()处理流程图 4)数据库的设计 用户信息表 (用户名,密码,是否在线,爱好,性别,年龄 ) 24 好友关系表 (A,B,备注姓名 ) 五、程序源代码(核心部分) 实验二 如上核心的设置机制处所示,在核心分析的同时已经给出了核心代码,在这就不再重复了 实验三 1)服务器核心代码 服务器 接收来自客户端信息 并做相应处理 public void run() { try { ()。 ///加载驱动程序 25 } catch (ClassNotFoundException e1) { // TODO Autogenerated catch block ()。 } try { reader = new BufferedReader(new InputStreamReader( ()))。 ///输入流放到 buffer缓冲区 writer = new PrintWriter((), true)。 /////使用 PrintWriter建立一个发送信息的通道 String msg。 while (isrunning) { if ((msg = ()) != null) { if (([LOGIN])) { username = (7)。 //获取用户名 reflash(true, true, true, false)。 } else if (([FIREND])) { // 添加好友表项 String bfirend = (8)。 msg_firend(bfirend)。 } else if (([CHANGE])) { // 修改好友备注 “[CHANGE]好友 备注 ” msg_change(msg)。 } else if (([UPDATE])) { msg_update(msg)。 } else if (([MSG])) { // 发送信息到指定对象 (msg)。 (msg)。 } else if (([FILE])) { // 发送文件 String temp = (6)。 String type = (0, ( ))。 temp = (( )+1)。 String listener = (0,( ))。 temp = (( )+1)。 String sender = (0, ( ))。 temp = (( ) + 1)。 getfile(type,msg)。 //接收 (listener,msg)。 sendfile(type,msg,listener)。 ///发送 26 (())。 } else if (([CON])){ msg_connect(msg)。 } else if (([EXIT])) { = false。 (this, msg)。 (this)。 reflash(false, true, false, true)。 break。 } } } } catch (IOException e) { // TODO Autogenerated catch block ()。 } finally { try { (this)。 if (reader != null) ()。 if (writer != null) ()。 if (socket != null) ()。 reader = null。 writer = null。 socket = null。 (username + 已下线 ...)。 (连接人数 : + ())。 } catch (Exception e) { } } } private void msg_connect(String msg){ ////提取用户名,密码,查找数据库,登录 String temp = (5)。 String mark = (0, ( ))。 temp = (( )+1)。 String username = (0,( ))。 String password = (( )+1)。 27 try { Connection con。 con = (jdbc:odbc:mychatdb, , )。 ///与数据库建立连接 stmt = ()。 if((L)){ ///登录 ResultSet rset = stmt .executeQuery(select * from user where username = 39。 + username + 39。 AND password =39。 +password +39。 )。 if (()) { (this, [SUCCESS])。 } } else if((R)){ ///insert,新用户注册 (insert into user values(39。 + username + 39。 ,39。 + password + 39。 ,1,39。 39。 ,39。 39。 ,0)。 )。 (this, [SUCCE。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。