网络课程设计实验报告--QQ聊天实现
《网络交流——QQ即时通讯》教学设计
《网络交流——QQ即时通讯》教学设计一、教学目标:1.了解QQ即时通讯软件的基本功能和使用方法;2.学会创建QQ账号、添加好友、发送消息等基本操作;3.能够运用QQ即时通讯软件进行网络交流。
二、教学重点:1.学生能够熟练操作QQ即时通讯软件;2.学生能够理解并运用QQ进行网络交流。
三、教学准备:1.教师准备一台电脑、投影仪和音响设备;2.学生准备一台电脑或手机,并提前安装好QQ即时通讯软件。
四、教学过程:1.导入(5分钟)教师通过投影仪展示QQ即时通讯软件的界面,引发学生对QQ的认识和使用期望,介绍QQ的功能和作用。
2.讲解(10分钟)教师详细讲解QQ的基本功能:创建账号、登录、添加好友、发送消息等。
并结合PPT 图示,讲解各个功能的操作步骤和注意事项。
3.操作演示(15分钟)教师通过电脑进行QQ的操作演示,示范登录账号、添加好友、发送消息等操作,并向学生解答遇到的问题。
4.学生练习(20分钟)学生按照教师的示范,自行操作QQ软件。
教师在一旁现场辅导,提供实时帮助。
5.整理学习成果(10分钟)请学生总结他们在操作过程中遇到的困难和解决办法。
学生可以以小组讨论的形式,将问题和解决办法填入表格中,并请各组派代表汇报。
6.网络交流实践(30分钟)学生利用QQ软件进行小组间的网络交流实践。
每个小组选择一个话题,进行文字或语音交流,并向全班汇报交流结果。
7.课堂总结(5分钟)教师对本节课的教学进行总结,强调学生的学习成果和进步,并鼓励学生在日常生活中积极运用QQ进行网络交流。
五、教学评价:教师利用学生的表现和交流结果,进行评价,主要评价学生在操作QQ软件时的熟练程度和网络交流的有效性。
六、板书设计:QQ即时通讯1.创建账号2.登录3.添加好友4.发送消息七、教学延伸:1.鼓励学生积极参与QQ群组,拓宽交流圈子,了解更多的信息;2.指导学生合理安排网络交流时间,避免过多投入网络而忽视线下交流;3.引导学生积极参与线上讨论和活动,提高网络交流的质量和效果。
仿QQ聊天系统实验报告
软件工程项目实践大作业仿QQ软件的设计与实现软件工程项目实践大作业仿QQ软件的设计与实现班级:20090615学号:2009061503姓名:教师:于金峰平时成绩30分:+大作业成绩:70分:=总分:__ 成绩: _2012年6月一、项目可行研究新近一两年Android手机如雨后春笋般涨势迅猛,由此基于Android系统的应用开发也变得更加普遍,结合本次课程的学习,也为了更好的培养我们的自主开发能力,我们小组开发了这个模仿QQ的聊天系统。
二、需求阶段1.系统功能需求(1)登录功能。
(2)客户可以通过服务器转发,实现一对一和多对多聊天。
(3)实现呼叫功能。
(4)客户端程序应该可以实时显示目前其它用户的状态。
(5)应该具有易用、美观的图形界面。
2. 系统性能需求实用性:为信息交流提供方便,有效进行作业管理。
操作简单:本系统应该适用于不同水平的使用者,包括事业单位和企业单位,同时系统不应太复杂和烦琐,因此要求系统的操作尽可能简单易行。
技术先进:产品的系统设计和开发应紧跟着整个计算机发展潮流,采用当时最先进的设计思想,利用最新的开发技术和开发工具。
使系统能够无论在功能设计上,还是在技术实现上,都处于同行业的领先地位。
安装使用简便:服务器端的安装简洁明了,客户机无需再装任何软件就可以直接注册登陆聊天。
适应性:应该能广泛应用于不同类型的企事业单位。
系统采用模块化设计,用户可以根据自己的实际情况自行组合,使系统在不同的硬件环境下都能得以应用。
代码可读性好:文中的代码将尽可能简洁,易懂。
3. 系统运行需求1、移动客户端需500MHz及以上的处理器2、移动客户端需256MB及以上的ROM空间3、移动客户端需256MB及以上的RAM空间4、移动客户端需具有WiFi/GRPS网络接收模块,能正常连接到网络5、服务端需具有P4 1.6GHz及以上的处理器6、服务端需具有80GB及以上的硬板空间7、服务端需具有1GB及以上的内存空间三、设计过程1. 业务流程图业务流程图2. 功能结构图3. 数据流图(4. ER 图用户聊天记录登陆信息用户名密码验证信息登陆MN用户名密码登陆信息输入NM聊天时间聊天对象聊天内容图6 ER 图5. 后台数据库设计基于服务器跨平台运行的架构,服务器的后台数据库使用了SQL Server2005。
java课程设计报告qq聊天
河南工业大学课程设计课程设计名称:java qq聊天系统专业班级:学生姓名: xiaoyang学号:指导教师:王高平课程设计时间: 2016.7.7计科专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页1 需求分析运用java语言实现一个qq聊天局域网系统,主要功能实现信息的相互交流,整个程序分三个大模块,第一个模块是服务器端的设计,第二个模块是客户端的实现,第三个模块是数据库连接的实现。
主要实现一个客户端发送串字符信息,另一端客户端能接受(在一个局域网下),同时建立了一个数据库(mysql),用于注册用户,同时存储用户的信息,以及找回密码要用到的密保问题答案。
2 概要设计主要类:JqqF类:主要是登录窗口Cell类:按钮类Findpassword.java:找回密码类Look:注册窗口Lookpassword.java:查看密码窗口Register.java:注册账号类JavaMysql.java:数据库类,连接数据库。
3 运行环境(软、硬件环境)Windows,64位pc机,jvm(java虚拟机)4 开发工具和编程语言Eclipse,java5 详细设计Server.java(实现一个小型的服务器)package ;import java.io.*;import .*;import java.util.*;public class Sever {boolean started = false;ServerSocket ss = null;List<Client> clients = new ArrayList<Client>();public static void main(String[] args) {new Sever().start();}public void start() {try {ss = new ServerSocket(9999);started = true;} catch (BindException e) {System.out.println("端口使用中....");System.out.println("请关掉相关程序并重新运行服务器!");System.exit(0);} catch (IOException e) {e.printStackTrace();}try {while (started) {Socket s = ss.accept();Client c = new Client(s);System.out.println("a client connected!");new Thread(c).start();clients.add(c);// dis.close();}} catch (IOException e) {e.printStackTrace();} finally {try {ss.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}class Client implements Runnable {private Socket s;private DataInputStream dis = null;private DataOutputStream dos = null;private boolean bConnected = false;public Client(Socket s) {this.s = s;try {dis = new DataInputStream(s.getInputStream());dos = new DataOutputStream(s.getOutputStream());bConnected = true;} catch (IOException e) {e.printStackTrace();}}public void send(String str) {try {dos.writeUTF(str);} catch (IOException e) {clients.remove(this);System.out.println("对方退出了!我从List里面去掉了!");// e.printStackTrace();}}public void run() {//线程体try {while (bConnected) {String str = dis.readUTF();System.out.println(str);for (int i = 0; i < clients.size(); i++) {Client c = clients.get(i);c.send(str);}}} catch (EOFException e) {System.out.println("Client closed!");} catch (IOException e) {e.printStackTrace();} finally {try {if (dis != null)dis.close();if (dos != null)dos.close();if (s != null) {s.close();// s = null;}} catch (IOException e1) {e1.printStackTrace();}}}}}JqqF类:登录的窗口类package ;import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;public class JqqF extends JFrame implements MouseListener { private static final long serialVersionUID = 1L;public static void main(String args[]) {JqqF f = new JqqF();}public static JTextField name = new JTextField(20);JLabel nameLab = new JLabel("输入qq号:");public static JPasswordField nam = new JPasswordField(20);JLabel nameLa = new JLabel("输入qq密码:");String path5 = "pic//x.png";// 背景图片ImageIcon background5 = new ImageIcon(path5);cell but = new cell(background5);Font fnt = new Font("Serief", Font.BOLD, 15);String path4 = "pic//l.png";ImageIcon background4 = new ImageIcon(path4);cell bt = new cell(background4);String path3 = "pic//b.png";ImageIcon background3 = new ImageIcon(path3);cell bt2 = new cell(background3);String path2 = "pic//qq3.png";ImageIcon background2 = new ImageIcon(path2);JLabel label2 = new JLabel(background2);public JqqF() {super("qq测试");this.setSize(500, 334);this.setLocation(300, 200);this.setVisible(true);String path = "pic//qq.png";// 背景图片ImageIcon background = new ImageIcon(path);// 把背景图片显示在一个标签里面JLabel label = new JLabel(background);label.setLayout(null);// 把标签的大小位置设置为图片刚好填充整个面板label.setBounds(0, 0, this.getWidth(), this.getHeight()); // 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明JPanel imagePanel = (JPanel) this.getContentPane(); imagePanel.setOpaque(false);// 把背景图片添加到分层窗格的最底层作为背景nameLab.setFont(fnt);nameLab.setForeground(Color.yellow);nameLa.setFont(fnt);nameLa.setForeground(Color.yellow);nameLab.setBounds(160, 120, 100, 30);bt.setBounds(360, 120, 72, 30);bt.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {register x = new register();}});name.setBounds(250, 120, 100, 30);nameLa.setBounds(160, 160, 100, 30);nam.setBounds(250, 160, 100, 30);bt2.setBounds(360, 160, 72, 30);bt2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new findpassword();}});// // nam.setColumns(20) ;label2.setBounds(65, 120, 88, 83);but.setBounds(185, 210, 147, 30);but.addMouseListener(this);label.add(nameLab);label.add(bt);label.add(bt2);label.add(nam);label.add(nameLa);label.add(label2);label.add(name);label.add(but);this.getLayeredPane().add(label, newInteger(Integer.MIN_VALUE));this.setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 让组件可见}public void mouseClicked(MouseEvent e) {char[] a = nam.getPassword();String s = new String(a);// System.out.print(s);String b = "1";Statement st = null;ResultSet rs = null;boolean t = false;boolean x = false;Connection con = null;String sql = "SELECT name,mibao,password FROM qq";try {con = new JavaMysql().connnecton();st = con.createStatement();rs = st.executeQuery(sql);} catch (ClassNotFoundException e2) {// TODO Auto-generated catch blocke2.printStackTrace();} catch (SQLException e2) {// TODO Auto-generated catch blocke2.printStackTrace();}try {while (rs.next()) {String qq = rs.getString("name");//匹配用户名String password1 = rs.getString("password");//匹配密码if (qq.equals(name.getText())) {t = true;if (password1.equals(nam.getText())) {x = true;}}}con.close();st.close();rs.close();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}if (t) {if (x) {JqqF2 f1 = new JqqF2();//好友列表在这里显示this.setVisible(false);//登录窗口消失f1.setVisible(true);//好友列表出现} else {new passworderror();}} else {new look();}}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) { // TODO Auto-generated method stub}};Passerror类:密码错误提示窗口package ;import javax.swing.JFrame;import javax.swing.JLabel;public class passworderror extends JFrame{JLabel b = new JLabel("密码错误");public passworderror(){this.add(b);this.setSize(100,100);this.setLocation(300, 500);this.setVisible(true);this.setResizable(false);}Findpassword类:找回密码类package ;import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;public class findpassword extends JFrame {JLabel nameLab2 = new JLabel("密保问题:你的学号是多少");JTextField name3 = new JTextField(20);Font fnt = new Font("Serief", Font.BOLD, 15);cell but = new cell("确定");public findpassword() {this.setSize(500, 334);this.setLocation(300, 200);this.setVisible(true);this.setLayout(null);nameLab2.setFont(fnt);nameLab2.setForeground(Color.green);nameLab2.setBounds(140, 150, 200, 30);name3.setBounds(140, 180, 100, 30);this.add(name3);this.add(nameLab2);but.setBounds(160, 240, 147, 30);but.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Statement st = null;ResultSet rs = null;boolean t = false;Connection con = null;String sql = "SELECT name,mibao,password FROM qq";//查找语句try {con = new JavaMysql().connnecton();st = con.createStatement();rs = st.executeQuery(sql);} catch (ClassNotFoundException e2) {// TODO Auto-generated catch blocke2.printStackTrace();} catch (SQLException e2) {// TODO Auto-generated catch blocke2.printStackTrace();}try {while (rs.next()) {String qqmibao = rs.getString("mibao");String name1 = rs.getString("name");String password1 = rs.getString("password");if (name3.getText().equals(qqmibao)&& name1.equals(.getText())) {//比较是否相等new lookpassword(password1);//如果和密保答案相等就输出t = true;break;}}if (t == false) {new look2password();}} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}try {con.close();st.close();rs.close();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});this.add(but);}}}Register类:注册新用户package ;import java.awt.Color;import java.awt.Font;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Statement;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;public class register extends JFrame implements MouseListener {JTextField name1 = new JTextField(20);JLabel nameLab = new JLabel("输入新qq号:");JPasswordField nam = new JPasswordField(20);JLabel nameLa = new JLabel("输入qq密码:");JLabel nameLab2 = new JLabel("密保问题:你的学号是多少");JTextField name3 = new JTextField(20);Font fnt = new Font("Serief", Font.BOLD, 15);// 背景图片cell but = new cell("确定");public register() {super("注册");this.setSize(500, 334);this.setLocation(300, 200);this.setVisible(true);String path = "pic//qq.png";// 背景图片ImageIcon background = new ImageIcon(path);// 把背景图片显示在一个标签里面JLabel label = new JLabel(background);label.setLayout(null);// 把标签的大小位置设置为图片刚好填充整个面板label.setBounds(0, 0, this.getWidth(), this.getHeight());// 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明JPanel imagePanel = (JPanel) this.getContentPane();imagePanel.setOpaque(false);nameLab.setFont(fnt);nameLab2.setFont(fnt);nameLab.setForeground(Color.yellow);nameLab2.setForeground(Color.green);nameLa.setFont(fnt);nameLa.setForeground(Color.yellow);nameLab.setBounds(140, 80, 100, 30);but.setBounds(160, 240, 147, 30);name1.setBounds(230, 80, 100, 30);nameLa.setBounds(140, 120, 100, 30);nam.setBounds(230, 120, 100, 30);nameLab2.setBounds(140, 150, 200, 30);name3.setBounds(140, 180, 100, 30);label.add(nameLab);label.add(but);label.add(nam);label.add(nameLa);label.add(nameLab2);label.add(name1);label.add(name3);but.addMouseListener(this);this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));this.setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String args[]) {register f = new register();}@Overridepublic void mouseClicked(MouseEvent e) {String name = name1.getText();String mibao = name3.getText();String password = new String(nam.getPassword());PreparedStatement st = null;Connection con = null;String sql = "INSERT INTO qq(name,mibao,password) VALUES(?,?,?)";//预处理指令try {con = new JavaMysql().connnecton();st = con.prepareStatement(sql);} catch (ClassNotFoundException e2) {// TODO Auto-generated catch blocke2.printStackTrace();} catch (SQLException e2) {// TODO Auto-generated catch blocke2.printStackTrace();}try {st.setString(1, name);//向数据库输入账号st.setString(2, mibao);//密保答案st.setString(3, password);//向数据库输入密码st.executeUpdate();st.close();con.close();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}.setText("");JqqF.nam.setText("");this.setVisible(false);}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}}JqqF2类:好友列表package ;import java.awt.event.WindowAdapter ;import java.awt.event.MouseListener ;import java.awt.event.WindowEvent ;import java.awt.event.MouseEvent ;import java.awt.Color ;import javax.swing.JFrame ;import java.awt.event.ActionListener ;import java.awt.event.WindowEvent ;import java.awt.event.ActionEvent ;import java.awt.Color ;import java.awt.Container;import java.awt.GridLayout ;import java.awt.Font ;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import .Socket;import .UnknownHostException;import javax.swing.ImageIcon;import javax.swing.JFrame ;import javax.swing.JButton ;import javax.swing.JLabel ;import javax.swing.JSplitPane;import javax.swing.JTextArea ;import javax.swing.JPasswordField ;import javax.swing.JScrollPane ;import javax.swing.JPanel ;public class JqqF2 extends JFrame implements MouseListener { String path4 = "pic//m.png";// 背景图片ImageIcon background4 = new ImageIcon(path4);cell bt = new cell(background4);public JqqF2(){// 准备好了一个面板super.setLayout(null) ;super.setTitle("qq好友列表") ;this.setSize(500, 334);this.setLocation(300, 200);this.setVisible(true);String path = "pic//qq2.png";// 背景图片ImageIcon background = new ImageIcon(path);// 把背景图片显示在一个标签里面JLabel label = new JLabel(background);label.setLayout(null);// 把标签的大小位置设置为图片刚好填充整个面板label.setBounds(0,0,300, 140);// 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明 JPanel imagePanel = (JPanel) this.getContentPane();imagePanel.setOpaque(false);// 把背景图片添加到分层窗格的最底层作为背景String path2 = "pic//qq3.png";ImageIcon background2 = new ImageIcon(path2);// 把背景图片显示在一个标签里面JLabel label2 = new JLabel(background2);label2.setLayout(null);label2.setBounds(5, 10, 88, 83);String path3 = "pic//f.png";ImageIcon background3 = new ImageIcon(path3);// 把背景图片显示在一个标签里面JLabel label3 = new JLabel(background3);label3.setLayout(null);label3.setBounds(0, 140, 324, 22);JLabel name = new JLabel("冰河世纪(1174850659)");name.setForeground(Color.orange);name.setLayout(null);name.setBounds(97, 10, 180, 15);label.add(name);JLabel name2 = new JLabel("个性签名:坚持就是胜利");name2.setForeground(Color.GREEN);name2.setLayout(null);name2.setBounds(97, 60, 300, 15);label.add(name2);label.add(label2);this.add(label3);bt.addMouseListener(this);super.add(bt);bt.setBounds(0,162,325,60) ;this.setSize(300,550) ;this.setLocation(300,200) ;this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);}@Overridepublic void mouseClicked(MouseEvent e) {JqqF3 f1 =null;//提升作用域try {f1 = new JqqF3("吻柔哥(996059929)");//初始化聊天窗口} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}this.setVisible(true);f1.setVisible(true);}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}};JqqF3类:聊天窗口package ;import java.awt.Color;import java.awt.Font;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import .Socket;import .UnknownHostException;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTextArea;public class JqqF3 extends JFrame implements MouseListener { String path4 = "pic//qq6.png";ImageIcon background4 = new ImageIcon(path4);cell cell2 = new cell(background4);static JTextArea j1 = new JTextArea(3, 20);static JTextArea j2 = new JTextArea(3, 20);Socket client = null;public JqqF3(String s) throws IOException {super(s);j1.setLineWrap(true);j2.setLineWrap(true);this.setLayout(null);j1.setBackground(Color.gray);j2.setBackground(Color.WHITE);JScrollPane scr1 = new JScrollPane(j1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,//加入滚动条JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);JScrollPane scr2 = new JScrollPane(j2,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);scr1.setBounds(0, 0, 600, 600);scr2.setBounds(0, 600, 500, 60);cell2.setBounds(500, 600, 100, 60);cell2.addMouseListener(this);Font font = new Font("宋体", Font.BOLD, 15); // 创建一个字体以便其它调用j1.setFont(font);j1.setForeground(Color.blue);this.add(scr1);this.add(scr2);this.add(cell2);this.setSize(606, 694);this.setLocation(300, 200);this.setVisible(true);this.setResizable(false);client = new Socket("localhost", 9999);//初始化窗口时,客户端连接上new Thread(new Receive(client)).start();//开始一个新的进程用于接收}@Overridepublic void mouseClicked(MouseEvent e) {try {new Thread(new Send(client)).start();//开始一个线程用于发送信息} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}}Send类:用于向服务器发送信息package ;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.;import java.io.;import java.io.IOException;import java.io.InputStreamReader;import .Socket;import java.text.DateFormat;import java.util.Date;public class Send implements Runnable {private BufferedReader console;//输入流private DataOutputStream dos;//输出流private boolean isRuning = true;public Send(Socket client) throws IOException {dos = new DataOutputStream(client.getOutputStream());//获得输出流}public void send() {DateFormat df = null;df = DateFormat.getDateTimeInstance();String s1 = df.format(new Date());//获得日期String s2 = JqqF3.j2.getText();String s3 = "冰河世纪(1174850659) " + s1;String s = s3 + ":" + "\n" + " " + s2;try {if (null != s && !s.equals("")) {dos.writeUTF(s);dos.flush();JqqF3.j2.setText("");//每发送完一个信息编辑框清空}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void run() {//线程体{send();}}}Receive类:用于接收信息package ;import java.io.DataInputStream;import java.io.IOException;import .Socket;public class Receive implements Runnable {private DataInputStream dis;private boolean isRunning = true;public Receive(Socket client) {try {dis = new DataInputStream(client.getInputStream());//获得输入流} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();isRunning = false;}}public String receive() {String s = "";try {s = dis.readUTF();//读出字符串} catch (IOException e) {e.printStackTrace();isRunning = false;}return s;}@Overridepublic void run() {while (true) {JqqF3.j1.append(receive());//写到编辑框上JqqF3.j1.append("\n");}}}Cell:按钮类package ;import java.awt.Font;import javax.swing.ImageIcon;import javax.swing.JButton;public class cell extends JButton {private static final long serialVersionUID = 1L;public cell(ImageIcon img) {super(img);//传入一个图片类//Font fnt = new Font("Serief", Font.BOLD, 20);//设置字体此处没用//this.setFont(fnt);} // 加入事件public cell(String s) {super(s);//传入字符串参数Font fnt = new Font("Serief", Font.BOLD, 20);this.setFont(fnt);}}Look类:出现注册提示框package ;import javax.swing.JFrame;import javax.swing.JLabel;public class look extends JFrame {JLabel b = new JLabel("请注册");public look() {this.add(b);this.setSize(100, 100);this.setLocation(300, 500);this.setVisible(true);// this.setResizable(false);}}Look2password类:出现密码提示框package ;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.JFrame;import javax.swing.JLabel;public class look2password extends JFrame {public look2password() {String s = "回答错误";JLabel b = new JLabel(s);this.add(b);this.setSize(100, 100);this.setLocation(300, 500);this.setVisible(true);// this.setResizable(false);}}JavaMysql类:用于数据库的链接package ;import java.sql.*;public class JavaMysql{private Connection connecter = null;public JavaMysql() throws ClassNotFoundException, SQLException{ String driver="com.mysql.jdbc.Driver";String url="jdbc:mysql://localhost:3306/QQ";Class.forName(driver);connecter=DriverManager.getConnection(url,"root","1234");}public Connection connnecton (){return connecter;//获得连接}}6 调试分析做到Send类时遇到了瓶颈,主要原因有以下几点,1、主要是进程间的通信不是特别熟悉,总是抛出异常,每次用完输出输入流要记得关闭2、输入输出流的选择也不是很清楚,有可能会产生乱码,其次。
QQ聊天程序设计报告
QQffl夭程序设计报告湖北科技学院计算机科学与技术学院课程设计报告课程名称:面向对象程序课程设计姓名:吕治政学号:4031019专业:计算机专业班级:11计应班院系:计算机科学与技术设计时间: 5 月~6月设计地点:实验室课程设计目的〈〈面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。
其目的在于经过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。
课程设计任务与要求:主题:局域网聊天程序的设计与实现该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。
客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。
课程设计选用Eclipse作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。
建议采用UML建模技术进行系统的分析设计,在报告中画出系统用例图和类图,并将UML图复制到设计报告中。
经过这次设计,要求掌握以下内容:面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用类、包、接口的定义与使用常见工具类与算法的实现Java常见标准GUI组件及其事件处理Java的异常处理机制3.课程设计思路:我的思路是实现客户端与服务器端进行一对一的通信,这是一种最简单的聊天工具,也是对于一个初学者说是最容易理解的。
但我们实际生活中的聊天模型不是这样的,例如:腾讯QQ聊天工具是把服务器作为一个中转站,一个客户端向服务器端发出请求申请连接,另一个客户端也向服务器端请求连接,一个客户端先把信息发送到服务器,然后服务器把信息转发给另一个客户端,如果把它做成和腾讯QQ差不多,那还是有一定难度的,那就必须要掌握多线程,其实多线程是一个难点。
我的思路如下:实现客户端与服务器端的一对一通信,也就是客户端说一句发送给发送给服务器,服务器接收信息,然后服务器说一句发送给客户端,客户端接收,就这样你一句我一句。
模拟QQ聊天程序设计报告
模拟QQ聊天程序设计报告----网络软件创新实验报告一. 需求分析1.1 开发背景在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ、网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识。
1.2 功能要求(1)登录功能。
(2)客户可以通过服务器转发,实现一对一和多对多聊天。
(3)实现呼叫功能。
(4)客户端程序应该可以实时显示目前其它用户的状态。
(5)应该具有易用、美观的图形界面。
1.3 运行环境本系统基于WIN NT 和ACCESS XP设计,适用于WIN2000/WIN XP等系统,并需要安装office2000/office xp.1.4 功能实现1.登录验证功能。
2. 客户通过服务器转发,实现聊天功能。
3. 实时显示目前其它用户的状态。
4. 保存并能察看聊天纪录。
5.申请新的用户号码。
6. 易用、美观的图形界面,实现系统托盘。
二.技术路线2.1 总体方案为实现网络聊天的功能,采用Windows Socket编程,服务器与客户端采用了TCP/IP 连接方式,在设计聊天方案时,实行将所有信息发往服务器端,再由服务器进行分别处理的思路,服务器端是所有信息的中心。
由于服务器端要保存用户信息,我们利用数据库来实现这一功能,因此首先需要建立用户信息数据库。
在客户端保存聊天纪录和用户号码这一功能的实现中,采用了文件系统设计。
在信息到来及好友上线时,通过闪动托盘图标和播放不同的音乐进行提示。
建立消息链表来保存用户接收的各种消息。
服务器及客户端的功能可划分为以下模块:客户端:1)登陆功能:建立与服务器的连接并登陆,能显示登陆错误信息。
2)界面显示:将在线好友显示在好友列表中,并实现系统托盘,加入工具栏便于操作。
3)聊天功能:与好友聊天。
4)聊天纪录:能保存聊天纪录,并能察看聊天纪录。
聊天系统程序设计实践报告
程序设计实践设计报告课题名称:网络聊天程序的设计和实现学生姓名:班级:班内序号:学号:日期:1.课题概述1.1课题目标和主要内容课题实现的主要内容:本程序实现一个简单的网络聊天程序,采用客户机/服务器(Client/Server)模式,将客户端和服务端功能在一个程序中实现,运行时在不同的计算机上打开此程序即可进行聊天。
程序实现一对多,多对多聊天功能,满足聊天的基本功能。
课题目标:学会使用MFC搭建基本的对话框及基本控件的使用,了解socket套接字相关知识,实现简单聊天程序。
通过实践复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力。
使用的开发平台:Microsoft Visual Studio 2010、windows7采用的主要工具:计算机、相关图书资料1.2系统的主要功能功能列表或功能框图,以及功能的简要说明。
服务器端负责指定ip地址及端口号,建立服务器,有监听、接受、发送消息等功能。
客户端通过指定的ip及端口号来连接服务器,有接受和发送消息等功能。
2. 系统设计2.1 系统总体框架包括系统框架图或层次逻辑图,设计思想等首先由服务器在指定的端口开通指定的服务,然后在客户机通过指定服务器地址、端口来连接服务器以获得指定的服务。
服务器端首先由一个服务器启动一个线程监听来自客户器的Socket连接,当服务器的Socket与客户器的Socket经过TCP协议的3次握手建立了连接后,双方就可以通过这个连接来进行信息的发送和接收,并可以进行文件的传输。
在进行程序设计时,对于多个用户连接服务器采用了多线程处理,每个客户端的Socket都启动一个线程来连接服务端的Socket,服务端的Socket接受连接后,通过一个结构体保存已经连接的客户端的地址和套接字,当客户端发送一个信息到服务端,服务器接收信息后,再从结构体中取出已保存的套接字转发所收到的信息。
客户端由客户端的Socket提出连接请求,要连接的目标是服务器端的Socket。
计算机网络课程设计实验报告--QQ网络聊天室实现
计算机网络课程设计报告设计选题网络聊天室姓名马继鸣学号 **********完成时间 2012-1-12 一、需求分析聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客户机/服务器架构模式。
通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能。
用多线程可完成多点对多点的聊天。
主要有两个应用程序,分别为服务器程序和客户端程序。
服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。
采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。
聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。
该聊天系统实现群聊,用户登陆,退出聊天系统等功能。
二. 设计1.设计思想:课程设计中利用JAVA实现基于C/S模式的聊天程序。
聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户发来的消息,客户端登录到服务器端才可以实现正常的聊天功能。
2.功能设计(1)服务器端的主要功能如下。
在特定端口上进行侦听,等待客户端连接。
用户可以配置服务端的侦听端口,默认端口为10000.当停止服务时,断开所有用户连接。
(2)客户端的主要功能如下。
连接到已经开启聊天服务的服务端。
当服务器端开启的话,用户可以随时登录与注销。
用户可以向所有人发送消息。
3.详细设计聊天室服务器端设计聊天室服务器中主要的功能文件的功能如下:MyButLis.java主要用于添加事件侦听和动作处理,具体是服务器按钮中的“终止”“发送”的处理。
public class MyButLis implements ActionListenerprivate MyServe server;private JTextField filed1;public void actionPerformed(ActionEvent e)MyChatSet.java服务器的线程队列,运行的方法,新增一个用户,则增加一个线程,并可以返回应答消息,给其余用户发送上下线信息,发送聊天信息(群聊私聊虽然已写,但是不知为何没有实现),发送用户列表。
互联网程序设计实验五
实验报告(五)课程名称:互联网程序设计年级:2017级实验日期:姓名:学号:班级:教师评语(成绩):实验名称:实验五 QQ聊天项目拓展(4学时)DatagramPacket backPacket=new DatagramPacket(buf,buf.length,packet.getAddress(),packet.getPort());//向登录用户发送的报文serverSocket.send(backPacket); //发送}else { //登录成功backMsg.setType("M_SUCCESS");byte[] buf=Translate.ObjectToByte(backMsg);DatagramPacket backPacket=new DatagramPacket(buf,buf.length,packet.getAddress(),packet.getPort());//向登录用户发送的报文serverSocket.send(backPacket); //发送User user=new User();user.setUserId(userId); //用户名user.setPacket(packet); //保存收到的报文userList.add(user); //将新用户加入用户列表//更新服务器聊天室大厅parentUI.txtArea.append(userId+" 登录!\n");//向所有其他在线用户发送M_LOGIN消息,向新登录者发送整个用户列表for (int i=0;i<userList.size();i++) { //遍历整个用户列表//向其他在线用户发送M_LOGIN消息if(!userId.equalsIgnoreCase(userList.get(i).getUserId())){DatagramPacketoldPacket=userList.get(i).getPacket();DatagramPacket newPacket=new DatagramPacket(data,data.length,oldPacket.getAddress(),oldPacket.getPort());//向其他用户发送的报文serverSocket.send(newPacket); //发送}//end if//向当前用户回送M_ACK消息,将第i个用户加入当前用户的用户列表Message other=new Message();other.setUserId(userList.get(i).getUserId());other.setType("M_ACK");byte[] buffer=Translate.ObjectToByte(other);DatagramPacket newPacket=new DatagramPacket(buffer,buffer.length,packet.getAddress(),packet.getPort());serverSocket.send(newPacket);}//end for}//end if}else if (msg.getType().equalsIgnoreCase("M_MSG")) { //是M_MSG消息//更新显示parentUI.txtArea.append(userId+" 说:"+msg.getText()+"\n");//转发消息for (int i=0;i<userList.size();i++) { //遍历用户DatagramPacket oldPacket=userList.get(i).getPacket();DatagramPacket newPacket=new DatagramPacket(data,data.length,oldPacket.getAddress(),oldPacket.getPort());serverSocket.send(newPacket); //发送}}else if (msg.getType().equalsIgnoreCase("M_QUIT")) { //是M_QUIT消息//更新显示parentUI.txtArea.append(userId+" 下线!\n");//删除用户for(int i=0;i<userList.size();i++) {if (userList.get(i).getUserId().equals(userId)) {userList.remove(i);break;}}//end for//向其他用户转发下线消息for (int i=0;i<userList.size();i++) {DatagramPacket oldPacket=userList.get(i).getPacket();DatagramPacket newPacket=new DatagramPacket(data,data.length,oldPacket.getAddress(),oldPacket.getPort());serverSocket.send(newPacket);}//end for}//end if} catch (IOException | NumberFormatException ex) { }}//end while}//end run}//end class实验结果:五、总结对上机实践结果进行分析,问题回答,上机的心得体会及改进意见。
QQ模拟聊天系统实验报告
题目:Q Q 模拟聊天系统学院:软件学院班级:10级网络工程3班****:****:***学号:**********学年、学期:2012~2013学年第一学期目录1.引言 (3)1.1 需求分析 (3)1.2聊天室程序的开发背景 (3)1.3聊天室的设计目标 (4)2.总体设计 (4)2.1 功能要求 (4)2.2系统主要功能和主要功能描述: (5)3.详细设计 (6)3.1设计流程图 (6)3.2客户端的实现.................................. . (7)3.3服务端的实现 (14)4.运行结果 (21)4.1 客户端 (21)4.2 服务器端 (22)4.3 客户端登陆到服务器端 (22)4.4 进行对话 (23)4.5 退出服务器端与客户端 (23)5.心得体会 (26)6.参考文献 (26)1.引言计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。
各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。
随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《TCP/IP协议与网络编程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。
接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。
1.1 需求分析:当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet 的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。
在网络早期就开始盛行,不论是BBS,IRC 都有类似网上聊天室的机制。
QQ聊天程序的设计报告
科技学院计算机科学与技术学院课程设计报告课程名称:面向对象程序课程设计:吕治政学号:专业:计算机专业班级:11计应班院系:计算机科学与技术设计时间: 2011年5月 ~ 6月设计地点:实验室课程设计目的《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。
其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。
课程设计任务与要求:主题:局域网聊天程序的设计与实现该程序实现局域网的聊天功能,包括服务器端程序和客户端程序两部分。
客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。
课程设计选用Eclipse作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。
建议采用UML建模技术进行系统的分析设计,在报告中画出系统用例图和类图,并将UML图复制到设计报告中。
通过这次设计,要求掌握以下容:面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用类、包、接口的定义与使用常用工具类与算法的实现Java常用标准GUI组件及其事件处理Java的异常处理机制3.课程设计思路:我的思路是实现客户端与服务器端进行一对一的通信,这是一种最简单的聊天工具,也是对于一个初学者说是最容易理解的。
但我们实际生活中的聊天模型不是这样的,例如:腾讯QQ聊天工具是把服务器作为一个中转站,一个客户端向服务器端发出请求申请连接,另一个客户端也向服务器端请求连接,一个客户端先把信息发送到服务器,然后服务器把信息转发给另一个客户端,如果把它做成和腾讯QQ差不多,那还是有一定难度的,那就必须要掌握多线程,其实多线程是一个难点。
我的思路如下:实现客户端与服务器端的一对一通信,也就是客户端说一句发送给发送给服务器,服务器接收信息,然后服务器说一句发送给客户端,客户端接收,就这样你一句我一句。
《网络交流——QQ即时通讯》教学设计
《网络交流——QQ即时通讯》教学设计一、教学目标:1.了解网络交流的概念和意义。
2.掌握QQ即时通讯软件的基本使用方法。
3.学会在QQ上进行文字聊天和发送表情、图片等内容。
4.能够在QQ上添加、管理好友,并了解隐私设置。
二、教学过程:2.讲授:介绍QQ即时通讯软件的基本概况,包括QQ的发展历程、功能特点等内容。
3.示范操作:通过投影或电脑屏幕展示,演示QQ的下载安装和注册过程。
4.实操练习:让学生自行下载安装QQ并注册账号,然后引导学生进行基本的设置和个人资料填写。
5.练习评价:让学生在QQ上互相发送文字信息进行对话练习,评价学生的对话内容和表达方式的合理性。
6.讲解高级功能:介绍QQ的高级功能,如发送表情、图片、语音和文件等,着重讲解如何使用表情和发送图片。
7.示范操作:再次投影或电脑屏幕演示,示范如何发送表情和图片,并引导学生进行实际操作。
9.讲解好友管理:介绍QQ的好友管理功能,包括添加好友、删除好友和分组管理等,重点讲解如何添加好友。
11.实操练习:让学生互相添加好友并进行分组管理的练习,评价学生添加好友和分组管理的正确性和合理性。
12.讲解隐私设置:介绍QQ的隐私设置功能,包括个人资料保护、消息提醒和黑名单等,重点讲解如何设置个人资料保护。
14.实操练习:让学生自行调整隐私设置,练习个人资料保护的设置,评价学生的设置是否合理和有效。
15.总结:对本节课学习的内容进行总结,回答学生提出的问题,并展示学生的学习成果。
三、教学资源:1.投影仪或电脑屏幕。
3.相关教学视频或PPT。
四、教学评价与反馈:1.观察学生在实操练习中的表现,评价学生对QQ的基本使用方法的掌握程度。
3.评价学生在练习中发送的表情和图片的适用性和创意性。
4.评价学生的好友管理和隐私设置的正确性和合理性。
5.提供学生反馈渠道,收集学生对本节课教学内容和方式的评价和建议,用于调整和提升教学效果。
网络课程设计(简单聊天系统的设计与实现)
简单聊天程序的设计与实现摘要本课程设计主要是设计并实现一个简单的聊天程序,该聊天程序能够支持多人聊天,聊天的内容可以仅仅支持文本信息,聊天程序包括服务器程序和客户端程序。
在课程设计中系统的开发平台为Eclipse程序运行平台为Windows XP。
关键词:聊天程序;服务器;客户端;Eclipse1 引言本课程设计主要是简单聊天程序的设计,使用MSN或QQ,分析聊天程序的功能需求及工作原理。
该聊天程序能够支持多人聊天,聊天的内容可以仅仅支持文本信息,聊天程序包括服务器程序和客户端程序。
1.1 课程设计目的该课程设计的目的主要是通过对简单聊天程序的设计及QQ原理的分析,了解聊天程序的功能需求及工作原理;熟悉TCP/IP协议以及套节字编程原理;熟悉Eclipse编程环境及Socket/ServerSocket编程方法。
1.2 课程设计要求(1)按要求编写课程设计报告书,能正确阐述设计结果。
(2)通过课程设计培养学生严谨的科学态度,认真的工作作风和团队协作精神。
(3)学会文献检索的基本方法和综合运用文献的能力。
(4)在老师的指导下,要求每个学生独立完成课程设计的全部内容。
1.3 课程设计平台课程设计中系统的开发平台为Eclipse,程序运行平台为Windows XP。
2 需求分析2.1功能需求分析(1)用户端之间的信息发送,本程序需要实现的最基本的功能。
用户在界面上可以将自己需要发送的信息填入相应的对话框中,点击发送按钮后,可以将信息正常的发送给相应的其它用户,这个过程中的客户端与客户端之间使用点对点发送信息,预计利用TCP/IP协议中的UDP协议,在本程序中共需要3个端口,此功能预计使用3号端口。
(2)在线用户主机IP列表的维护。
在用户发送信息之前,需要选择相应的目的地端IP,这也就需要客户端拥有在线用户主机的IP 地址,这个在线主机列表的维护是需要客户端定时自动向服务器端发送信息,服务器端收集并维护在线用户列表,再发送回客户端。
模拟qq聊天小程序课程设计
模拟qq聊天小程序课程设计一、课程目标知识目标:1. 学生能够理解并掌握QQ聊天小程序的基本原理和功能。
2. 学生能够了解并运用程序设计中的顺序、选择和循环结构。
3. 学生能够掌握在QQ聊天小程序中实现文字、表情发送和接收的基本方法。
技能目标:1. 学生能够运用所学知识,设计并编写一个简单的模拟QQ聊天小程序。
2. 学生能够在编写程序过程中,熟练使用编程软件,掌握调试和修改程序的基本技巧。
3. 学生能够通过小组合作,提高沟通与协作能力,共同完成课程任务。
情感态度价值观目标:1. 学生培养对编程的兴趣和热情,树立编程改变生活的信念。
2. 学生在学习过程中,培养解决问题的能力和勇于尝试的精神。
3. 学生通过课程学习,认识到网络交流的重要性,提高网络素养,尊重网络道德规范。
本课程针对初中年级学生,结合教材内容,注重实用性,旨在让学生在掌握编程知识的同时,提高实际操作能力和团队协作能力。
课程目标具体、可衡量,便于学生和教师在教学过程中明确预期成果,为后续的教学设计和评估提供依据。
二、教学内容本章节教学内容主要包括以下三个方面:1. 程序设计基础知识:- 了解编程语言的基本概念,如变量、数据类型、运算符等。
- 学习程序设计的基本结构,包括顺序、选择和循环结构。
2. QQ聊天小程序功能实现:- 分析QQ聊天小程序的功能需求,明确文字、表情发送和接收的实现方法。
- 学习使用编程语言实现聊天界面设计、消息发送与接收等核心功能。
3. 实践与拓展:- 制定实践任务,分组进行模拟QQ聊天小程序的开发,培养学生的实际操作能力。
- 结合教材相关章节,拓展学习网络编程知识,了解实际应用场景。
教学内容安排和进度如下:1. 程序设计基础知识(2课时)2. QQ聊天小程序功能实现(3课时)3. 实践与拓展(2课时)本教学内容紧密结合课程目标,注重科学性和系统性,按照教学大纲逐步推进,确保学生能够学以致用,提高编程实践能力。
教学内容与教材章节紧密关联,为学生提供清晰的学习路径和丰富的学习资源。
课程设计qq聊天系统源代码
课程设计qq聊天系统源代码一、课程目标知识目标:1. 让学生掌握QQ聊天系统的基础知识,包括网络通信原理、客户端与服务器间的交互过程。
2. 学习并理解QQ聊天系统源代码的结构和功能,掌握相关编程语法和逻辑。
技能目标:1. 培养学生运用所学知识,独立编写和修改QQ聊天系统源代码的能力。
2. 提高学生的问题解决能力,使其能够分析和解决在开发QQ聊天系统过程中遇到的技术难题。
情感态度价值观目标:1. 激发学生对计算机编程和网络通信的兴趣,培养其探索精神和创新意识。
2. 培养学生的团队协作精神,使其在项目开发过程中学会与他人沟通与协作。
3. 引导学生认识到网络通信技术在社会发展中的重要性,激发其社会责任感和使命感。
课程性质:本课程为实践性较强的课程,以项目驱动的方式进行教学,使学生能够将所学理论知识应用于实际项目中。
学生特点:学生具备一定的编程基础和网络通信知识,对新鲜事物充满好奇心,喜欢动手实践。
教学要求:教师需注重理论与实践相结合,关注学生的个体差异,提供针对性的指导,以提高学生的学习兴趣和自信心。
同时,注重培养学生的团队协作能力和解决问题的能力。
在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. 网络通信原理:讲解TCP/IP协议、客户端与服务器模型、端口号等基本概念,为学生编写QQ聊天系统源代码打下理论基础。
2. 编程语言:介绍QQ聊天系统源代码所使用的编程语言(如Java、C#等),复习相关语法知识,强调面向对象编程思想。
3. QQ聊天系统架构:分析QQ聊天系统的整体架构,包括客户端、服务器端的模块划分和功能描述,使学生了解整个系统的运行机制。
4. 源代码解析:详细讲解QQ聊天系统源代码的结构、关键函数和功能模块,指导学生阅读和分析源代码,掌握其工作原理。
5. 编写与调试:教授学生如何编写和修改QQ聊天系统源代码,进行功能拓展和优化,并通过调试工具进行问题排查和修复。
计算机网络课程设计报告--聊天程序
计算机网络课程设计报告题目:网络聊天程序的设计与实现姓名:申超明学号:0705010313班级:计算机3班指导老师:文宏湖南科技大学计算机科学与工程学院2010年9月一:实验名称网络聊天程序的设计与实现二:实验目的了解Socket通信的原理,并通过程序实现通信的过程。
三:实验要求熟悉Socket程序通信过程,熟悉在通信过程中流之间的转换。
程序中熟悉灵活运用线程执行相关操作。
四:实验原理Socket通信的原理还是比较简单的,它大致分为以下几个步骤。
服务器端的步骤如下:建立服务器端的Socket,开始侦听整个网络中的连接请求。
当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。
当完成通信后,服务器关闭与客户端的Socket连接。
客户端的步骤如下:建立客户端的Socket,确定要连接的服务器的主机名和端口。
发送连接请求到服务器,并等待服务器的回馈信息。
连接成功后,与服务器进行数据的交互。
数据处理完毕后,关闭自身的Socket连接。
五:程序截图:图1-服务器端启动服务器图2-客户端连接数据库图3-客户端发送消息图4-服务器段接收客户端发送过来的消息六:程序代码:Qserver.csusing System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using ;using .Sockets;using System.Threading;namespace WindowsApplication2{public partial class qserver : Form{public qserver(){InitializeComponent();}private string ipv4;private void Form1_Load(object sender, EventArgs e){IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName());ipv4 = ip[0].ToString();bel4.Text = ipv4;}TcpListener tcpls;Socket sk;NetworkStream ns;StreamReader sr;StreamWriter sw;Thread tred;private void button1_Click(object sender, EventArgs e){tcpls = new TcpListener(1235);tcpls.Start();MessageBox.Show("服务器已启动");this.button1.Enabled = false;sk = tcpls.AcceptSocket();MessageBox.Show("客户端已连接");ns = new NetworkStream(sk);sr = new StreamReader(ns, Encoding.UTF8);sw = new StreamWriter(ns, Encoding.UTF8);}string smessage = "";private void button2_Click(object sender, EventArgs e){this.textBox1.Focus();tred = new Thread(new ThreadStart(this.acceptcm));tred.Start();this.textBox2.Focus();}private void button3_Click(object sender, EventArgs e){sendtoc();this.textBox2.Focus();}private void textBox2_KeyPress(object sender, KeyPressEventArgs e) {if (e.KeyChar == '\r')sendtoc();}private void acceptcm(){lock (this){try{if (sr.ReadLine() != null){this.textBox1.Text += sr.ReadLine();}elsereturn;}catch (System.Exception ex){}finally{tred.Abort();}}}public void sendtoc(){try{smessage = "\r\n" + this.textBox3.Text + "(" + DateTime.Now.ToLongTimeString() + ")" + " " + this.textBox2.Text;this.textBox1.Text += smessage;this.textBox2.Clear();sw.WriteLine(smessage);sw.Flush();}catch{MessageBox.Show("服务器端错误");}}private void qserver_FormClosed(object sender, FormClosedEventArgs e){if (tcpls != null)tcpls.Stop();//if (tred != null)// tred.Abort();Application.Exit();}}}客户端代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using ;using .Sockets;using System.Threading;namespace Client{public partial class qclient : Form{public qclient(){InitializeComponent();}TcpClient tcpct;NetworkStream ns;StreamReader sr;StreamWriter sw;Thread trdc;/// <summary>/// 连接服务器操作,发送socket请求/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){try{string ip = this.textBox4.Text + "." + this.textBox5.Text + "." + this.textBox6.Text + "." + this.textBox7.Text;tcpct = new TcpClient(ip, 1235);ns = tcpct.GetStream();sr = new StreamReader(ns);sw = new StreamWriter(ns);this.button1.Enabled = false;}catch{MessageBox.Show("请确认是否开启服务器...");}}string cmessage = "";/// <summary>/// 发送消息事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){try{sendtos();}catch{// MessageBox.Show("出错啦!"+"\r\n"+"1.你是否已经连接服务器?"+"\r\n"+"2.等待服务器发回消息.");}finally{this.textBox2.Focus();}}/// <summary>/// 发送函数/// </summary>public void sendtos(){if (this.textBox2.Text == "") //发送{MessageBox.Show("内容不能为空");return;}else{cmessage = "(" + DateTime.Now.ToLongTimeString() + ")" + "\r\n" + this.textBox3.Text + this.textBox2.Text;this.textBox1.Text += cmessage;this.textBox2.Clear();// savechathistrory();sw.WriteLine(cmessage);sw.Flush();}}/// <summary>/// 接收函数/// </summary>public void acceptsm(){lock (this){try //接收{this.textBox1.Text += sr.ReadLine() + "\r\n";// savechathistrory();}catch{// MessageBox.Show("出错啦!" + "\r\n" + "1.你是否已经连接服务器?" + "\r\n" + "2.没有服务器消息.");}finally{trdc.Abort();}}}/// <summary>/// 接收消息事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button3_Click(object sender, EventArgs e){this.textBox1.Focus();trdc = new Thread(new ThreadStart(acceptsm));trdc.Start();this.textBox2.Focus();}/// <summary>/// 保存历史记录,未做./// </summary>private void savechathistrory(){StreamWriter fsw = new StreamWriter(erAppDataPath + "chathistory.txt", false, Encoding.UTF8);sw.WriteLine(this.textBox1.Text);fsw.Flush();fsw.Close();}/// <summary>/// 文件关闭之后,关闭客户端,关闭活动的线程/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void qclient_FormClosed(object sender, FormClosedEventArgs e){if (tcpct != null)tcpct.Close();Application.Exit();}/// <summary>/// 历史记录查看,未做。
java课程设计qq
java课程设计 qq一、课程目标知识目标:1. 让学生掌握Java编程语言中面向对象编程的基本概念,特别是类与对象的关系、封装、继承和多态。
2. 使学生了解并运用QQ聊天软件中的基本功能实现原理,如用户登录、添加好友、发送消息等。
3. 帮助学生理解事件处理机制,学会使用Java编写图形用户界面(GUI)。
技能目标:1. 培养学生运用Java语言设计并实现一个简易QQ聊天软件的能力。
2. 提高学生分析问题、解决问题的能力,使其能够运用所学知识解决实际编程问题。
3. 培养学生团队协作能力,通过分组合作完成课程设计任务。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养其主动学习和探究的精神。
2. 培养学生面对编程难题时,具备勇于尝试、克服困难的精神。
3. 引导学生认识到编程在生活中的实际应用,提高其社会责任感。
本课程针对高年级学生,他们已经具备了一定的Java编程基础。
课程性质为实践性较强的课程设计,要求学生将所学知识运用到实际项目中。
通过分解课程目标为具体学习成果,教师可以更好地进行教学设计和评估,确保学生在完成课程设计任务的同时,达到预定的教学目标。
二、教学内容1. 面向对象编程基础:- 类与对象的关系- 封装、继承和多态- Java异常处理2. Java图形用户界面(GUI)编程:- Swing组件的使用- 事件处理机制- 布局管理器3. 网络编程基础:- Socket编程原理- TCP/IP协议简介- 多线程编程4. 简易QQ聊天软件实现:- 用户登录功能实现- 好友列表管理- 消息发送与接收- 聊天窗口设计教学内容参考教材相关章节,结合课程目标进行选择和组织。
教学大纲安排如下:第1周:面向对象编程基础复习第2周:Java图形用户界面编程第3周:网络编程基础第4周:简易QQ聊天软件功能分析与设计第5周:简易QQ聊天软件实现与调试第6周:课程设计总结与展示教学内容确保科学性和系统性,让学生在实践中掌握Java编程知识,提高编程能力。
模拟QQ聊天程序设计报告
模拟QQ聊天程序设计报告----网络软件创新实验报告一. 需求分析1.1 开发背景在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ、网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识。
1.2 功能要求(1)登录功能。
(2)客户可以通过服务器转发,实现一对一和多对多聊天。
(3)实现呼叫功能。
(4)客户端程序应该可以实时显示目前其它用户的状态。
(5)应该具有易用、美观的图形界面。
1.3 运行环境本系统基于WIN NT 和ACCESS XP设计,适用于WIN2000/WIN XP等系统,并需要安装office2000/office xp.1.4 功能实现1.登录验证功能。
2. 客户通过服务器转发,实现聊天功能。
3. 实时显示目前其它用户的状态。
4. 保存并能察看聊天纪录。
5.申请新的用户号码。
6. 易用、美观的图形界面,实现系统托盘。
二.技术路线2.1 总体方案为实现网络聊天的功能,采用Windows Socket编程,服务器与客户端采用了TCP/IP 连接方式,在设计聊天方案时,实行将所有信息发往服务器端,再由服务器进行分别处理的思路,服务器端是所有信息的中心。
由于服务器端要保存用户信息,我们利用数据库来实现这一功能,因此首先需要建立用户信息数据库。
在客户端保存聊天纪录和用户号码这一功能的实现中,采用了文件系统设计。
在信息到来及好友上线时,通过闪动托盘图标和播放不同的音乐进行提示。
建立消息链表来保存用户接收的各种消息。
服务器及客户端的功能可划分为以下模块:客户端:1)登陆功能:建立与服务器的连接并登陆,能显示登陆错误信息。
2)界面显示:将在线好友显示在好友列表中,并实现系统托盘,加入工具栏便于操作。
3)聊天功能:与好友聊天。
4)聊天纪录:能保存聊天纪录,并能察看聊天纪录。
(完整word版)JavaQQ聊天界面实验报告
Java语言实验报告实验环境:Eclipse 6。
0环境实验目的:1、了解文件和流的概念,字节的输入输出,掌握文件的操作;2、了解网络通信,掌握TCP Socket通信和TCP Socket的工作方式.实验原理:1、采用TCP Socket通信是实现的点对点聊天,ChatServer类提供服务端的TCP的链接服务,SingleTalkClient类与SingleTalkServer类实现客户端与服务端的TCP Socket通信以及两者的图形界面;2、Socket对象用于在服务端和客户端的TCP链接之间进行发送和接受的双向数据通信,从Socket对象中能够获得字节输入流和字节输出流。
实验内容:实现一对一的聊天程序1、分析需求,确定程序主要框架、所需要的编程语言、以及开发环境;2、研究一对一聊天程序的原理及主要功能;3、根据实验要求编写聊天界面及聊天程序;4、完成编码,进行测试;5、完成测试,完善代码.实验步骤:一、创建客户端界面package jiemian;import java。
io。
*;import java。
net。
*;import javax。
swing。
*;import java.awt.event.*;import java。
awt.*;/*** 用户界面SingleTalkClient*/public class SingleTalkClient extends JFrame {private static final long serialVersionUID = 3774711323397279594L;JTextArea mainArea;JTextArea sendArea;ChatClient client;JTextField ipArea;JTextField nameArea;JButton buttonLink;public void setClient(ChatClient client){this。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机网络课程设计报告设计选题网络聊天室姓名马继鸣学号 0909090630完成时间 2012-1-12 一、需求分析聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客户机/服务器架构模式。
通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能。
用多线程可完成多点对多点的聊天。
主要有两个应用程序,分别为服务器程序和客户端程序。
服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。
采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。
聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。
该聊天系统实现群聊,用户登陆,退出聊天系统等功能。
二. 设计1.设计思想:课程设计中利用JAVA实现基于C/S模式的聊天程序。
聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户发来的消息,客户端登录到服务器端才可以实现正常的聊天功能。
2.功能设计(1)服务器端的主要功能如下。
在特定端口上进行侦听,等待客户端连接。
用户可以配置服务端的侦听端口,默认端口为10000.当停止服务时,断开所有用户连接。
(2)客户端的主要功能如下。
连接到已经开启聊天服务的服务端。
当服务器端开启的话,用户可以随时登录与注销。
用户可以向所有人发送消息。
3.详细设计聊天室服务器端设计聊天室服务器中主要的功能文件的功能如下:MyButLis.java主要用于添加事件侦听和动作处理,具体是服务器按钮中的“终止”“发送”的处理。
public class MyButLis implements ActionListenerprivate MyServe server;private JTextField filed1;public void actionPerformed(ActionEvent e)MyChatSet.java服务器的线程队列,运行的方法,新增一个用户,则增加一个线程,并可以返回应答消息,给其余用户发送上下线信息,发送聊天信息(群聊私聊虽然已写,但是不知为何没有实现),发送用户列表。
关键在于除了线程之外,还定义了传输数据时的协议内容,如何分辨不同的信息,如聊天信息,登陆信息,上下线信息,并把信息完整准确的传递。
public static ArrayList<MyserThread> servers=new ArrayList<MyserThread>();//线程队列public static void addThread(MyserThread th) //增加一个服务器线程对象public static void sendReMess(String type,String state,String s,MyserThread myth)//返回应答信息public static void SendOSMess(String type,String user)//其他用户上下线信息public static void SendChatMess(String type,String sender,String reciver,String Mess)//聊天信息public static void SendList//用户列表MyCheckTool.java保存用户的登陆信息,在其中建立一个码表,并且可以判断登陆信息是否合法。
//建立码表,用以保存用户信息private static Map<String, MyUserInfo> maps=new HashMap<String, MyUserInfo>();public static boolean CheckUser(MyUserInfo user)// 验证用户名MyFrame.java建立服务器的主界面,关联侦听器。
并启动线程。
MyFrame my=new MyFrame();my.ShowUI();// 显示UI界面public void ShowUI()server.SetUP();MyserThread.java服务器线程类,定义输入输出流,发送读取信息,获取信息中相应标签的信息,用以判断用户名,密码,并可以中断连接。
this.socket=socket;output=socket.getOutputStream();input=socket.getInputStream();public void SendMess(String s)//发送信息public String ReadMess() //读取信息public boolean ReadFirst()//将第一条信息读出来public String GetValue(String type ,String Mess)public void Pocess()//用以判断用户名、密码public void run()//线程开始public MyUserInfo getUser()//获得该线程中的用户信息MyServe.java建立服务器,并启动该线程。
server=new ServerSocket(inport);Socket sc=server.accept();//获得socket对象MyserThread th=new MyserThread(sc);th.start(); //启动线程客户端中主要的功能文件概述如下:MyButLis.java主要用于添加事件侦听和动作处理,具体是在客户端中的登陆注册发送等的处理。
public MyButLis(MySocketChat socket,JTextArea area1,JTextArea area2,MyLoginUI loginUI,JComboBox box)public void actionPerformed(ActionEvent e) //设置动作监听器MyChatFrame.java客户端的图形界面。
关联侦听器。
并启动线程。
socket.setArea(area1);socket.start()MyLoginUI.java登陆界面MySocketChat.java构建连接,截取字符串,发送登陆,注册,聊天信息,读取信息并判断设置启动线程方法。
public MySocketChat(JTextField field1,JTextField field2,JTextArea area)//重写构造函数public String GetValue(String type ,String Mess) //截取字符串public void SendMess(String type)// 发送登陆或者注册信息public void SendChat(String getter,String chat)// 发送聊天消息public String ReadMess ()//读入的信息public void CheckMess(String Mess) //判断是什么消息public void run()//设置启动方法三. 调试及测试1、调试过程中遇到的主要问题及解决方法在对于群聊和私聊的处理中,只实现了群聊,私聊虽有写,但是还没有实现,由于时间仓促,只能在寒假的其余时间努力完成。
还有就是如何在服务器与客户端的信息交互过程中,让他们能分辨是哪种信息并准确的读出来。
如果不能准确的分析,则数据的交换只能完成一种粗略的互换,而不能提取聊天内容等用户希望得到的信息。
为此,我专门看了很多相关的资料,在很多方法里面选取了一种自己容易理解的方法,我就定义了几种方式,分别辨认登陆注册聊天列表等信息:"<msg><type>"+type+"</type>"+"<name>"+user+"</name>"+"<pwd>"+pwd+"</pwd></msg>";//第一个与最后一个msg是标示一整句话的标示符 type标示数据类型,两个<type>中间的type即为需求数据,两个<user>之间的是用户名称,两个<pwd>之间的pwd指的是密码"<msg><type>chat</type>"+"<sender>"+user+"</sender>"+"<reciver>"+gett er+"</reciver>"+"<content>"+chat+"</content></msg>";//其中sender,reciever,content分别指发送者、接受者、内容。
一些语法问题,在随着写程序的过程中,也慢慢纠正。
在服务器组建中,由于java对于网络连接强有力的支持和丰富的代码,让我没有遇到太难的问题。
2、对设计和编码的回顾讨论和分析在获取系统时间这一块上,还是做得比较好。
Calendar ca=Calendar.getInstance();Date da=new Date();// 注意是在java.util.DateSimpleDateFormat format=new SimpleDateFormat("HH:mm:ss");//设置时间格式da=ca.getTime();time=format.format(da);处理保存的注册信息时,可能做得不是很好,将hashmap写入文件,这样不能长期保存注册信息,只能在服务器不关闭的状态下,保存注册信息。
这个也会继续改进3、程序运行的时空效率分析本程序应用了线程对端口进行侦听。
线程一直后台开启,长期占用系统资源,但又能及时的实现端口监听和消息的收发。
4、测试数据集服务器端程序主界面:可以记录用户名,账号,IP地址,并可以发送系统消息客户登陆注册界面注册成功提示框客户端运行界面用户端测试界面中间的(全部)按钮,点击后可以显示当前在线的好友列表,并选择聊天对象四、经验和体会。
这是我第一次做java项目,只是这个学期选修了面向程序设计,每周一节课,很浅显的学习了java语言,在综合性如此强的项目设计中,感觉力不从心。