今天为大家继续分享C/S聊天程序的开发与制作120,目前系统已经完成了初步功能,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步!!
开发语言为Java,开发环境Eclipse或者IDEA都可以。运行主程序,或者执行打开JAR文件即可以运行本程序
利用JDK自带的SWING框架开发,不需要安装第三方JAR包。纯窗体模式,直接运行Main文件即可以。选中Main.java,点右键 run as application启动相关程序。也客户把程序打包成JAR包,双击JAR即可以启动相关的程序。
1 本程序分客户端和服务器端。服务器端启动一个socket连接,socket是多线程,接受从客户端发来的连接,如果更新成功,同时更新用户立表。
2 客户端启动,相应的就和服务器端建立一个socket,接受从服务器传递过来的消息,同时更新Textarea中,实时可以看到群里的内容。
3 服务器断开的时候,客户端能够收到提示,并且相应收到实时的消息,客户端能够收到消息提示,并且客户端退出。
4 能够一个服务器端和多个客户端进行通信
Java语言进行通信主要有Socket,RMI,Hessian,Burlap,Httpinvoker,Web service等。后面几种比较复杂,而且基本没有学过这方面的知识,进行讨论和验证,决定选用Socket技术来进行本次课程设计的编程
启动服务端,启动服务器的端口,可以接受多个客户端发过来的,同时启动一个ServerThread,接受客户端发过的连接请求,发送消息等
服务器端启动后,客户端可以进行启动,建立客户端和服务器的socket的连接,客户端可以看到当前在线用户,用户额聊天记录等,并且客户发送消息。发送的消息在服务端也能显示。
多人聊天是指的,可以跟群里的所有人聊天,发送的消息,聊天室的所有人都能看到。
消息只能在发送和接受的人直接收到,其他的人不能收到。
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)在编写代码的时候,一定要边写边调试,要适时的设置断点,或者把某些变量的值输出到控制台,通过观察和分析变量的值,便于判断问题所在,同时,需要捕获异常的一定要把异常信息打印出来,便于分析问题。