1、或是否是某个班的学生(多个班的情况)。验证通过进入主界面,否则给出错误提示。3) 主界面列出该学生好友列表(同班级同学默认全是该生好友,如果是多个班则可以添加别班好友并经对方批准)。4) 即时聊天,选中某个好友,双击打开窗口聊天。如果不在线则服务器等对方上线后转发(此功能属拓展实现)。5) 可以修改自己的登陆密码。6) 题目 2:基于C/S的班级聊天室(群聊)工具(2人) 要求:1. C/S模式,基于Socket实现,服务器端用多线程来处理同时多个客户端连接。2. 数据存储:服务器端存储一个班级的信息;主要存储班级若干学生的基本信息。3. 界面:4. 功能:a) 登陆 输入用户名和密码;b)
2、登陆验证 根据服务器端存储的班级信息,对输入的用户进行验证,看是否存在于该班。c) 主界面应划分几个部分,至少有聊天室窗口部分(显示多人的聊天信息),自身发送聊天信息的窗口部分,聊天室成员列表部分,最好实现在线用户区别显示(此功能属拓展实现)等。进入主界面就可以参与群聊。d) 可以修改自己的登陆密码。题目 3:基于C/S的学生信息管理(1人)实现应用,可以通过网络在客户端对存放在服务器端的学生信息表(至少包含学号、姓名、性别、年龄、籍贯等字段)学生纪录增、删、改、查,并返回结果。要能通过菜单选择功能。基于Socket,多客户端使用多线程,以能同时从多个客户端执行功能。必须提供友好直观、布局合理
3、的图形界面选择功能、显示信息和填写修改信息。成员名单:侯吉超、毛建柏分工列表登陆界面毛建柏修改密码界面侯吉超聊天窗口界面好友界面服务器代码连接数据库课程设计报告1、项目简述和目的 聊天室做为即时通讯的一种,即时通讯(Instant Messenger,简称IM)软件可以说是目前我国上网用户使用率最高的软件,无论是老牌的ICQ,还是国内用户量第一的腾讯QQ,以及微软的MSN Messenger都是大众关注的焦点,它们能让你迅速地在网上找到你的朋友或工作伙伴,可以实时交谈和互传信息。而且,现在不少IM软件还集成了数据交换、语音聊天、网络会议、电子邮件的功能 。 通过此项目实训JAVA聊天室的设计,
4、实践、总结、回顾了网络编程思想以及编程方法,并通过编写程序来掌握Java语言编程技巧,将学习到的知识融会贯通,同时提高调试程序的能力,养成良好的编程习惯,并增强对程序设计整体思路的把握,理论与时间相结合。本文的主要工作集中在:该课程基于C/S模式,客户机向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。当用户聊天时,将当前用户名、聊天对象、聊天,内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端。当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对
5、象,接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化地显示在聊天信息界面上。进一步培养学生面向对象程序设计的思想,加深对面向对象程序设计四大特性的理解,针对JAVA语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。2、解题基本思路当用户聊天时,将当前用户名、聊天对象、聊天内容、群聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端。当用户发送聊天信息时,服务端将会收到客户端用So
6、cket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加到聊天对象集Message中,以供所有聊天用户访问,具体实现过程如图3-6所示。 接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,在本程序中设定的是3秒刷新服务器一次,如果间隔时间太短将会增加客户端与服务器端的通信负担,而间隔时间长就会让人感觉没有时效性,所以经过权衡后认为3秒最佳,因为每个用户都不可能在3秒内连续发送信息。 当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化地显示在聊天信息界面上。3、分析和设计本系统主要通过客户端,服务
7、器端来体现聊天系统的基本功能。(1)服务器端1.处理用户登录2.处理用户发送信息,服务器监控聊天内容,服务器过滤非法内容3.处理用户得到信息4.处理用户退出 5.保存用户聊天信息。(2)客户端 1.用户登录界面及结果 2.用户发送信息界面及结果 3.用户得到信息界面及结果 4.用户退出界面及结果目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡等,国外有著名的MSN(新版改名为Live Messenger)以及跨平台Gaim等。本人取最具代表性的QQ和MSN进行了一些研究,作为我开发聊天系统的准备。腾讯无疑是国内即时通讯市场的霸主,自从99年进入即时通讯领域
8、并迅速占市场之后,其在国内用户数量始终高居榜首,即使近几年面对微软MSN的强大攻势,腾讯QQ的时常占有率依然稳步增长。腾讯的成功与其对QQ的不断创新和完善是分不开的。参考了许多网络上的资料,以及自己通过观察腾讯QQ运行时的各种细节。可以确定腾讯QQ是以多服务器提供服务、服务器总控客户端、客户端之间UDP直连通信的。并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。4、主要程序源代码 客户端主要代码:import java.io.*;import javax.swing.*;import .*;import java.awt.event.*;import java.awt.*;i
9、mport java.text.DateFormat;import java.util.Date;class DL private JFrame f,jf; private Socket s; private PrintWriter p; private BufferedReader br; private TextField text1,text2,t,t1,t2,t3; private JTextField username; private JPasswordField password; private JLabel jl1; private JLabel jl2; private J
10、Button jl3; private JButton jl4; private JButton bu1; private JButton bu2; private JButton bu3; private JCheckBox jc1; private JCheckBox jc2; JTextField jtf1 ; JPasswordField jtf2 ,jtf3,jtf4; private JComboBox jcb; JFrame a2; DL() f=new JFrame(简易通讯软件); / 窗体组件初始化 Container con = f.getContentPane(); j
11、l1 = new JLabel(); / 设置背景图片 Image image1 = new ImageIcon(d:登录2.jpg).getImage(); jl1.setIcon(new ImageIcon(image1); jl1.setBounds(0, 0, 355, 265); / QQ登录头像设定 jl2 = new JLabel(); Image image2 = new ImageIcon(登录.jpg jl2.setIcon(new ImageIcon(image2); jl2.setBounds(40, 95, 50, 60); / 用户号码登录输入框 username
12、= new JTextField(); username.setBounds(100, 100, 150, 20); / 用户号码登录输入框旁边的文字 jl3 = new JButton(注册账号 jl3.setBounds(260, 100, 88, 20); / 密码输入框 password = new JPasswordField(); password.setBounds(100, 130, 150, 20); / 密码输入框旁边的文字 jl4 = new JButton(修改密码 jl4.setBounds(260, 130, 88, 20); / 输入框下方文字 jc1 = new
13、 JCheckBox(记住密码 jc1.setBounds(105, 155, 80, 15); jc2 = new JCheckBox(自动登录 jc2.setBounds(185, 155, 80, 15); jcb = new JComboBox(); jcb.addItem(在线隐身离开 jcb.setBounds(40, 150, 55, 20); / 按钮设定 bu1 = new JButton(登录 bu1.setBounds(280, 200, 65, 20); / bu1.addActionListener( this); / 给按钮添加1个事件 try s=new Sock
14、et(127.0.0.1,62000); p=new PrintWriter(s.getOutputStream(); new DLThread().start(); catch(Exception e) bu1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) try p.println(denglu+ +username.getText()+password.getText(); p.flush(); catch(Exception er) ); bu2 = new JButt
15、on(多账号 bu2.setBounds(5, 200, 75, 20); bu3 = new JButton(设置 bu3.setBounds(100, 200, 65, 20); / 所有组件用容器装载 con.add(jl2); con.add(jl3); con.add(jl4); con.add(jc1); con.add(jc2); con.add(jcb); con.add(bu1); con.add(bu2); con.add(bu3); con.add(jl1); con.add(username); con.add(password); jl4.addActionListe
16、ner(new ActionListener() temp(); ); jl3.addActionListener(new ActionListener() /new temp2(); f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); / f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); / 设置布局方式为绝对定位 f.setLayout(null); f.setBounds(0, 0, 355, 265); / 设置窗体的标题图标 Image image = new I
17、mageIcon(image:登录.jpg f.setIconImage(image); / 窗体大小不能改变 f.setResizable(false); / 居中显示 f.setLocationRelativeTo(null); / 窗体可见 f.setVisible(true); public void temp() a2 = new JFrame( Container container1 = a2.getContentPane(); container1.setLayout(null); a2.setBounds(200, 300, 400, 300); a2.setDefaultC
18、loseOperation(WindowConstants.EXIT_ON_CLOSE); JLabel lab4 = new JLabel(); JLabel lab5 = new JLabel(); JLabel lab6 = new JLabel(); JButton xg_bt1 = new JButton(); JButton xg_bt2 = new JButton(); JLabel lab3 = new JLabel(账号 lab3.setBounds(0, 0, 200, 300); lab3.setBounds(20, 20, 80, 20); jtf1 = new JTe
19、xtField(50); jtf1.setBounds(120, 20, 260, 20); container1.add(lab3); container1.add(jtf1); lab4 = new JLabel(密码 lab4.setBounds(20, 50, 80, 20); jtf2 = new JPasswordField(50); jtf2.setBounds(120, 50, 260, 20); container1.add(lab4); container1.add(jtf2); lab5 = new JLabel(新密码 lab5.setBounds(20, 80, 80
20、, 20); jtf3 = new JPasswordField(50); jtf3.setBounds(120, 80, 260, 20); container1.add(lab5); container1.add(jtf3); lab6 = new JLabel(确认密码 lab6.setBounds(20, 110, 80, 20); jtf4 = new JPasswordField(50); jtf4.setBounds(120, 110, 260, 20); container1.add(lab6); container1.add(jtf4); xg_bt1 = new JButt
21、on(确定 xg_bt1.setBounds(80, 150, 100, 20); container1.add(xg_bt1); xg_bt2 = new JButton(取消 xg_bt2.setBounds(200, 150, 100, 20); container1.add(xg_bt2); a2.setVisible(true); a2.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); xg_bt1.addActionListener(new ActionListener() public void actionP
22、erformed(ActionEvent e) if(!jtf3.getText().equals(jtf4.getText() JOptionPane.showMessageDialog(null, 密码输入不一样, 提示, JOptionPane.ERROR_MESSAGE); jtf3.setText( jtf4.setText( else trydel+jtf1.getText()+jtf2.getText()+jtf3.getText(); p.flush(); catch(Exception ex) ); xg_bt2.addActionListener(new ActionLis
23、tener() public void actionPerformed(ActionEvent e) a2.setVisible(false); class DLThread extends Thread public void run() while(true) br=new BufferedReader(new InputStreamReader(s.getInputStream(); String S=br.readLine(); System.out.println(S); String str; str=S.split( if(str0.equals() if(str1.equals(正确 f.setVisible(false); new haoyoujiemian(); new C(str2,str3); else if(str1.equals(错误 username.setText( password.setText( JOptionPane.showMessageDialog(null, 账号或密码输入错误Y a2.setVisible(false);修改成功N jtf1.setText( jtf2.setText( jtf3.setText( jtf4.setText( JOptionPane.showMessageDialog(null,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1