基于CS简单聊天程序课程设计_第1页
基于CS简单聊天程序课程设计_第2页
基于CS简单聊天程序课程设计_第3页
基于CS简单聊天程序课程设计_第4页
基于CS简单聊天程序课程设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论