![基于CS简单聊天程序课程设计_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/4e2a5089-740a-4bc8-b61a-38503c0d5825/4e2a5089-740a-4bc8-b61a-38503c0d58251.gif)
![基于CS简单聊天程序课程设计_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/4e2a5089-740a-4bc8-b61a-38503c0d5825/4e2a5089-740a-4bc8-b61a-38503c0d58252.gif)
![基于CS简单聊天程序课程设计_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/4e2a5089-740a-4bc8-b61a-38503c0d5825/4e2a5089-740a-4bc8-b61a-38503c0d58253.gif)
![基于CS简单聊天程序课程设计_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/4e2a5089-740a-4bc8-b61a-38503c0d5825/4e2a5089-740a-4bc8-b61a-38503c0d58254.gif)
![基于CS简单聊天程序课程设计_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-2/25/4e2a5089-740a-4bc8-b61a-38503c0d5825/4e2a5089-740a-4bc8-b61a-38503c0d58255.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机网络课程设计任务书 学 院计算机与信息工程学院专 业网络工程课程名称计算机网络题 目基于C/S模式的简单聊天程序完成期限自2016年6月13日至2016年6月26日共两周内容及任务一、项目的目的利用socket。实现客户与服务器间的信息互通。二、项目任务的主要内容和要求(1)用户聊天室具有群发,私聊,输入昵称与端口号等基本设置。点击“连接”按钮实现与服务器的连接。点击“断开”按钮实现与服务器的断开连接。(2)服务器聊天室具有启动服务器,停止服务器,显示当前在线的用户功能。点击“启动”按钮实现与服务器的连接。点击“停止”按钮实现与服务器的断开连接。(3)设计一个登录程序。验证通过后才能进入
2、聊天室。(4)当服务器与客户机连接成功后。能够互相接受和发送消息。当多个客户机启动时,服务器会创建子线程处理对应线程的消息。三、项目设计(研究)思路(1)设计步骤:先画出聊天室的模型,布局。(2)设计要点:设计主类与子类,分别实现不同的功能(3)主要技术分析:需要掌握socket通信,swing和awt,io的简单应用.(4)解决思路:先按照草稿图设计出聊天室布局。再写各个类的功能。简单测试与修改代码。最后完善。四、具体成果形式和要求(见第一部分)进度安排起止日期工作内容6.13-6.18设计聊天室的模型,布局6.19-6.20编写代码,初步实现聊天程序6.21-6.26完善代码,优化界面,完
3、成任务主要参考资料1赵生慧.Java面向对象程序设计(第二版)M.北京:中国水利水电出版社,2013.2万常选.数据库系统原理与设计(第二版)M.北京:清华大学出版社,2012.3谢钧,谢希仁.计算机网络教程(第四版)M.北京:人民邮电出版社,2014.4李刚.疯狂JAVA讲义M.(第三版).北京:电子工业出版社,2014. 5耿祥义、张跃平.Java2实用教程M.(第三版).北京:清华大学出版社, 2006. 6刘海杰.Java编程设计M.北京:中国铁道出版社,2006.指导教师意见(签字): 年 月 日系(教研室)主任意见(签字): 年 月 日基于C/S模式的简单聊天程序设计说明书 学院名
4、称: 计算机与信息工程学院 班级名称: 网络工程142 学生姓名: 张 三 学 号: 2014211540 题 目: 基于C/S模式的简单聊天程序 指导教师 姓 名: 陈 海 宝 起止日期: 2016.6.26 目录一、选题背景1二、方案论证1三、过程论述23.1 服务器端23.2 客户机端8四、结果分析15五、结论17第一部分:正文部分一、选题背景使用Socket实现网上聊天功能。用户可以通过客户端连接到服务器端并进行网上聊天。聊天时可以启动多个客户端。服务器端启动后,接收客户端发来的用户名和密码验证信息。验证通过则以当前的聊天客户列表信息进行响应;此后接收客户端发来的聊天信息,转发给客户端
5、指定的聊天客户(即私聊)或所有其他客户端;在客户断开连接后公告其退出聊天系统的信息。客户端启动后在GUI界面接收用户输入的服务器端信息、账号和密码等验证客户的身份。验证通过则显示当前系统在线客户列表。客户可以与指定对象进行私聊,也可以向系统中所有在线客户发送信息。二、方案论证基于C/S的简单聊天室可以实现用户与服务器间,服务器与多个用户间的通信。聊天室程序通常需要完成以下一些基本功能: (1)登录聊天室; (2)启动服务器;
6、0;(3)关闭服务器; (4)用户之间的聊天; (5)退出聊天室。 本系统其体功能需求如下: (1)聊天室管理员经登录界面登录到管理界面,即系统的服务器端。用户经登录界面进入聊天大厅。 (2)不论是管理员还是用户都需要在登录界面输入正确的用户名和密码后才可以登录到各自的界面中去。 (3)系统的两个主要界面都是为方便管理员和用户操作的。首先,管理员进入到管理界面后可以方便的启动/停止服务器,看到在线用户的信息和聊天
7、信息。用户进入到聊天大厅中可以聊天,查看服务器状态。 (4) 一个用户退出聊天室对其他用户不能产生影响,而服务器断开与客户端的连接则所有的用户都失去与服务器的连接。 (5)用户的聊天信息录入,重写,发送,接收方便,快捷。 (6)服务器状态,聊天信息和在线用户人数及时刷新。 (7)聊天室系统运行稳定、安全性高、三、过程论述3.1 服务器端(1)首先实现的是服务器开始工作 界面,如图3-1所示:图3-1 代码如下:public ChatServer() try System.out.println("
8、服务器开始工作."); server=new ServerSocket(port);/初始化服务器套接字 while (true) socket=server.accept();/等待连接 System.out.println(socket.getInetAddress()+"连接n");/得到客户机地址 Client client=new Client(socket);/实例化一个客户线程(其中线程Client中Socket,这里的Socket只是起个过渡作用) clients.add(client);/增加客户线程到向量中 client.start();/启动
9、线程 notifyChatRoom();/监视聊天室连接变化 catch(Exception ex) ex.printStackTrace(); (2)监视聊天室连接情况,并显示出来,如图3-2所示:图3-2代码如下:public static void notifyChatRoom() StringBuffer newUser=new StringBuffer("newUser"); for(int i =0;i<clients.size();i+) Client c=(Client)clients.elementAt(i); newUser.append(&quo
10、t;:"+); sendClients(newUser); public static void sendClients(StringBuffer message) for(int i =0;i<clients.size();i+) Client client=(Client)clients.elementAt(i); client.send(message); public void closeAll() while(clients.size()>0) Client client=(Client)clients.firstElement(); try cli
11、ent.socket.close(); catch(IOException e) e.printStackTrace(); clients.removeElement(client); /移出客户端 public static void disconnect(Client c) / 断开客户端 try System.err.println(c.ip+"断开连接n"); catch (Exception ex) ex.printStackTrace(); clients.removeElement(c); c.socket = null; (3)再次是实现服务器与客户机连接机
12、制,如果有客户机申请连接,则为此客户机创建线程,代码如下:public ChatServer() try System.out.println("服务器开始工作."); server=new ServerSocket(port);/初始化服务器套接字 while (true) socket=server.accept();/等待连接 System.out.println(socket.getInetAddress()+"连接n");/得到客户机地址 Client client=new Client(socket);/实例化一个客户线程(其中线程Clien
13、t中Socket,这里的Socket只是起个过渡作用) clients.add(client);/增加客户线程到向量中 client.start();/启动线程 notifyChatRoom();/监视聊天室连接变化 catch(Exception ex) ex.printStackTrace(); public ChatServer() try System.out.println("服务器开始工作."); server=new ServerSocket(port);/初始化服务器套接字 while (true) socket=server.accept();/等待连接
14、System.out.println(socket.getInetAddress()+"连接n");/得到客户机地址 Client client=new Client(socket);/实例化一个客户线程(其中线程Client中Socket,这里的Socket只是起个过渡作用) clients.add(client);/增加客户线程到向量中 client.start();/启动线程 notifyChatRoom();/监视聊天室连接变化 catch(Exception ex) ex.printStackTrace(); (4)再次是实现服务器的消息发送和接受的处理机制,如图
15、3-3所示:图3-3代码如下:public Client(Socket s) socket = s; try reader = new BufferedReader(new InputStreamReader(s.getInputStream();/得到输入流 ps = new PrintStream(s.getOutputStream();/到输出流 String info = reader.readLine();/读取接收到的信息 StringTokenizer stinfo = new StringTokenizer(info,":"); /分解字符串 String
16、head = stinfo.nextToken(); /获取关键字 System.out.println(stinfo.toString(); System.out.println(head); if (stinfo.hasMoreTokens() name = stinfo.nextToken(); /获取用户名 if (stinfo.hasMoreTokens() ip = stinfo.nextToken(); /获取IP地址 catch (IOException ex) ex.printStackTrace(); System.out.println(name); System.out
17、.println(ip); public void send (StringBuffer msg) ps.println(msg); /输出信息 ps.flush(); public void run() while (true) String line = null; try line = reader.readLine(); System.out.println("line:"+line); catch (IOException ex) ex.printStackTrace(); /输出错误信息 ChatServer.disconnect(this);/断开连接 Cha
18、tServer.notifyChatRoom();/更新信息 if (line = null) /客户离开 ChatServer.disconnect(this); ChatServer.notifyChatRoom(); StringTokenizer st = new StringTokenizer(line,":");/分解字符串 String keyword = st.nextToken(); if (keyword.equals("MSG") /发送来的聊天信息 StringBuffer msg = new StringBuffer("
19、;MSG:"); msg.append(name); /在信息上增加用户名 msg.append(st.nextToken("0n"); ChatServer.sendClients(msg);/发送聊天语句到各个客户端 System.out.println(msg); else if (keyword.equals("quit") /退出命令 ChatServer.disconnect(this); /断开连接 ChatServer.notifyChatRoom(); /刷新信息 3.2 客户机端(1)客户机登录界面如图3-4所示:图3-4代
20、码如下:public class ChatClient extends JFrame implements ActionListener TextField tfName = new TextField();/姓名输入文本域 Button btConnect = new Button("登陆");/连接按钮 Button btDisconnect = new Button("退出");/断开连接按钮 TextArea tfChat = new TextArea();/显示聊天信息文本域 Button btSend = new Button("发
21、送"); TextField tfMessage = new TextField();/聊天输入 java.awt.List list1 = new java.awt.List(9);/显示在线用户信息 Socket socket = null;/连接端口 PrintStream ps = null;/输出流 Listen listen = null; /监听线程类 class Listen extends Thread BufferedReader reader; PrintStream ps; String cname; Socket socket; ChatClient cha
22、tClient; public Listen(ChatClient client,String name,Socket socket) try this.chatClient = client; this.socket = socket; ame = name; reader = new BufferedReader(new InputStreamReader(socket.getInputStream(); ps = new PrintStream(socket.getOutputStream(); catch (IOException e) e.printStackTrace(); pub
23、lic void run() while (true) String line=null; try line = reader.readLine(); /读取数据流 System.out.println("客户端:"+line); catch (IOException ex) ex.printStackTrace(); ps.println("quit"); /断开连接 return; StringTokenizer stinfo = new StringTokenizer(line,":"); /分解字符串 String keywo
24、rd = stinfo.nextToken(); if (keyword.equals("MSG") chatClient.tfChat.append(line+"n"); else if (keyword.equals("newUser") chatClient.list1.clear(); chatClient.list1.add("users", 0); int i = 1; while (stinfo.hasMoreTokens() chatClient.list1.add(stinfo.nextToken
25、(), i+); public ChatClient(Socket socket) this.setLayout(new BorderLayout(); JPanel panel1 = new JPanel(); Label label = new Label("账号"); panel1.setBackground(Color.pink); panel1.add(label); panel1.add(tfName); panel1.add(btConnect); panel1.add(btDisconnect); this.add(panel1,BorderLayout.S
26、OUTH); JPanel panel2 = new JPanel(); tfChat.setBackground(Color.yellow); panel2.add(tfChat); panel2.add(list1); this.add(panel2,BorderLayout.CENTER); JPanel panel3 = new JPanel(); Label label2 = new Label("聊天板"); panel3.add(label2); panel3.add(tfMessage); panel3.add(btSend); this.add(panel
27、3,BorderLayout.NORTH); this.setBounds(50,50,400,350); this.setVisible(true); btConnect.addActionListener(this); btDisconnect.addActionListener(this); btSend.addActionListener(this); (2)其次是实现消息的接受和发送处理机制,代码如下:public void run() while (true) String line=null; try line = reader.readLine(); /读取数据流 System
28、.out.println("客户端:"+line); catch (IOException ex) ex.printStackTrace(); ps.println("quit"); /断开连接 return; StringTokenizer stinfo = new StringTokenizer(line,":"); /分解字符串 String keyword = stinfo.nextToken(); if (keyword.equals("MSG") chatClient.tfChat.append(lin
29、e+"n"); else if (keyword.equals("newUser") chatClient.list1.clear(); chatClient.list1.add("users", 0); int i = 1; while (stinfo.hasMoreTokens() chatClient.list1.add(stinfo.nextToken(), i+); (3)再次是实现客户端登陆界面以及功能的实现,如图3-5所示:图3-5代码如下: public class ChatClient extends JFrame
30、implements ActionListener TextField tfName = new TextField();/姓名输入文本域 Button btConnect = new Button("登陆");/连接按钮 Button btDisconnect = new Button("退出");/断开连接按钮 TextArea tfChat = new TextArea();/显示聊天信息文本域 Button btSend = new Button("发送"); TextField tfMessage = new TextFie
31、ld();/聊天输入 java.awt.List list1 = new java.awt.List(9);/显示在线用户信息 Socket socket = null;/连接端口 PrintStream ps = null;/输出流 Listen listen = null; /监听线程类 class Listen extends Thread BufferedReader reader; PrintStream ps; String cname; Socket socket; ChatClient chatClient; public Listen(ChatClient client,St
32、ring name,Socket socket) try this.chatClient = client; this.socket = socket; ame = name; reader = new BufferedReader(new InputStreamReader(socket.getInputStream(); ps = new PrintStream(socket.getOutputStream(); catch (IOException e) e.printStackTrace(); public void run() while (true) String line=nul
33、l; try line = reader.readLine(); /读取数据流 System.out.println("客户端:"+line); catch (IOException ex) ex.printStackTrace(); ps.println("quit"); /断开连接 return; StringTokenizer stinfo = new StringTokenizer(line,":"); /分解字符串 String keyword = stinfo.nextToken(); if (keyword.equals("MSG") chatClient.tfChat.append(line+"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年燃烧油项目可行性研究报告
- 年产10万台电动按摩床申请报告可行性研究报告
- 2025年度品牌形象广告定制制作合同书
- 2025年度建筑工程设计阶段造价咨询服务合同
- 2025年度古董艺术品买卖合同保密协议
- 2025年企业员工离职保密协议及商业秘密保护合同
- 2025年度广州租车押金退还合同范本
- 2025年度建筑工程设计居间服务费用结算合同
- 2025年度汽车租赁公司车辆租赁及售后服务合同
- 2025年度智能城市规划设计合同
- 浙江省杭州市2024-2025学年高三上学期一模英语试题(含解析无听力原文及音频)
- 2024年湖南高速铁路职业技术学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 小学四年级数学竞赛试题(附答案)
- 鲁科版高中化学必修2全册教案
- 《病理学基础》知识考核试题题库与答案
- 人口分布 高一地理下学期人教版 必修第二册
- 部编版六年级下册语文第3单元习作例文+习作PPT
- 四年级上册英语试题-Module 9 Unit 1 What happened to your head--外研社(一起)(含答案)
- 子宫内膜异位症诊疗指南
- 《高级计量经济学》-上课讲义课件
- 玩转数和形课件
评论
0/150
提交评论