java 编写的C/S聊天程序、 功能齐全同时附带详细的设计文档 下载即可以运行

今天为大家继续分享C/S聊天程序的开发与制作120,目前系统已经完成了初步功能,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步!! 

开发环境 

  开发语言为Java,开发环境Eclipse或者IDEA都可以。运行主程序,或者执行打开JAR文件即可以运行本程序

系统框架

  利用JDK自带的SWING框架开发,不需要安装第三方JAR包。纯窗体模式,直接运行Main文件即可以。选中Main.java,点右键 run as application启动相关程序。也客户把程序打包成JAR包,双击JAR即可以启动相关的程序。

主要功能

   1 需求分析

 1 本程序分客户端和服务器端。服务器端启动一个socket连接,socket是多线程,接受从客户端发来的连接,如果更新成功,同时更新用户立表。

2 客户端启动,相应的就和服务器端建立一个socket,接受从服务器传递过来的消息,同时更新Textarea中,实时可以看到群里的内容。

3 服务器断开的时候,客户端能够收到提示,并且相应收到实时的消息,客户端能够收到消息提示,并且客户端退出。

4 能够一个服务器端和多个客户端进行通信

   2 主要功能模块

 3  方案论证和比较

  Java语言进行通信主要有Socket,RMI,Hessian,Burlap,Httpinvoker,Web service等。后面几种比较复杂,而且基本没有学过这方面的知识,进行讨论和验证,决定选用Socket技术来进行本次课程设计的编程

实现效果

1 服务器启动

  启动服务端,启动服务器的端口,可以接受多个客户端发过来的,同时启动一个ServerThread,接受客户端发过的连接请求,发送消息等

 2 客户端启动

  服务器端启动后,客户端可以进行启动,建立客户端和服务器的socket的连接,客户端可以看到当前在线用户,用户额聊天记录等,并且客户发送消息。发送的消息在服务端也能显示。

 3 多人聊天

   多人聊天是指的,可以跟群里的所有人聊天,发送的消息,聊天室的所有人都能看到。

 4 单人聊天

  消息只能在发送和接受的人直接收到,其他的人不能收到。

 关键代码

public Client() {
  textArea = new JTextArea();
  textArea.setEditable(false);
  textArea.setForeground(Color.blue);
  textField = new JTextField();
  txt_port = new JTextField("6666");
  txt_hostIp = new JTextField("");
  txt_name = new JTextField("");
  btn_start = new JButton("连接");
  btn_stop = new JButton("断开");
  btn_send = new JButton("发送");
  listModel = new DefaultListModel();
  userList = new JList(listModel);
 
  northPanel = new JPanel();
  northPanel.setLayout(new GridLayout(1, 7));
  northPanel.add(new JLabel("端口"));
  northPanel.add(txt_port);
  northPanel.add(new JLabel("服务器IP"));
  northPanel.add(txt_hostIp);
  northPanel.add(new JLabel("姓名"));
  northPanel.add(txt_name);
  northPanel.add(btn_start);
  northPanel.add(btn_stop);
  northPanel.setBorder(new TitledBorder("连接信息"));
 
  rightScroll = new JScrollPane(textArea);
  rightScroll.setBorder(new TitledBorder("消息显示区"));
  leftScroll = new JScrollPane(userList);
  leftScroll.setBorder(new TitledBorder("在线用户"));
  southPanel = new JPanel(new BorderLayout());
  southPanel.add(textField, BorderLayout.SOUTH);
  southPanel.add(btn_send, "East");
  southPanel.setBorder(new TitledBorder("写消息"));
 
  centerSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftScroll,
    rightScroll);
  centerSplit.setDividerLocation(100);
 
  frame = new JFrame("客户机");
  // 更改JFrame的图标:
 // frame.setIconImage(Toolkit.getDefaultToolkit().createImage(Client.class.getResource("qq.png")));
  frame.getContentPane().setLayout(new BorderLayout());
  frame.getContentPane().add(northPanel, "North");
  frame.getContentPane().add(centerSplit, "Center");
  frame.getContentPane().add(southPanel, "South");
  
  txtAll = new JTextField();
  southPanel.add(txtAll, BorderLayout.WEST);
  txtAll.setColumns(10);
  
  lblNewLabel = new JLabel("请输入要发送的对象IP(默认发送给所有人)");
  southPanel.add(lblNewLabel, BorderLayout.CENTER);
  frame.setSize(600, 400);
  int screen_width = Toolkit.getDefaultToolkit().getScreenSize().width;
  int screen_height = Toolkit.getDefaultToolkit().getScreenSize().height;
  frame.setLocation((screen_width - frame.getWidth()) / 2,
    (screen_height - frame.getHeight()) / 2);
  frame.setVisible(true);
 
  // 写消息的文本框中按回车键时事件
  textField.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent arg0) {
    send();
   }
  });

项目总结

(1)在写代码之前,在大脑里一定要把思路理清楚,不能模模糊糊,一定要把功能图和流程图画出来,然后根据它去实现每一个功能块,要多分析,培养一种良好的逻辑思维能力。

(2)在写代码的过程中,一定要采取就近原则,同一个功能,或者对同一个组件的设置一般要写在一块,这样写的程序比较清晰,不容易出错,也便于查找。

(3)要养成良好的注释习惯,一是有利于别人阅读你的程序,同时也有利于自己以后再看,就能很快的读懂程序,提高效率。

(4)把功能模块化,即把实现相同功能的代码段封装成一到一个类或者一个方法中,实现的时候调用即可,这样能提高代码的可读性

(5)养成创建包来存放不同功能的类,使系统的结构更加模块化和规范化。

(6)在编写代码的时候,一定要边写边调试,要适时的设置断点,或者把某些变量的值输出到控制台,通过观察和分析变量的值,便于判断问题所在,同时,需要捕获异常的一定要把异常信息打印出来,便于分析问题。

猜你喜欢

转载自blog.csdn.net/bangxiecode/article/details/129894289