




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、黔南民族师范学院 计算机科学系计算机网络课程设计报告课题名称: 简单聊天程序 姓 名: 学 号: 专业班级: 系 (院): 计算机科学系 指导老师: 设计时间: 设计地点: 1、 实验目的和要求1. 实验目的 A。掌握网络编程的知识和技能。 B。熟悉网络软件的开发过程,锻炼解决实际问题的能力。2. 实验要求A。支持多人聊天,聊天内容可以仅仅支持文本信息。B。客户端程序具有图形化用户界面。2、 实验环境A。编程软件:EclipseB。数据库软件:MySql5.0;C。工具:jdk6.0;D。硬件环境:win7系统,Intel Core2 Duo3、 程序的逻辑框图 4、 程序的源代码Login.
2、javapackage chat4;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Dimension;import java.awt.Frame;import java.awt.Label;import java.awt.Panel;import java.awt.Toolkit;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowAdapter;import jav
3、a.awt.event.WindowEvent;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JTextField;public class Login private String name;Frame f;Label l_name, l_password;
4、JTextField jtf_name;JPasswordField jpf_password;Button bt_ok, bt_cancle, bt_regist;Panel p_top, p_center, p_bottom;Toolkit toolkit;Dimension screenSize, frameSize;Connection connection;Statement statement;ResultSet resultSet;public void initFrame() /初始化窗体f = new Frame(login);l_name = new Label(名字);l
5、_password = new Label(密码);jtf_name = new JTextField(20);jpf_password = new JPasswordField(20);bt_ok = new Button(登录);bt_ok.addMouseListener(new MouseAdapter() Overridepublic void mouseClicked(MouseEvent e) /判断你输入的用户名和密码是否正确/如果正确,就进入聊天界面if (verify(jtf_name.getText().trim(), jpf_password.getText().tri
6、m() f.setVisible(false);ChatUtil chatUtil=new ChatUtil(); else /否则,弹出对话框JOptionPane.showMessageDialog(f, 你的输入有误,请重新输入!););bt_regist = new Button(注册);bt_regist.addMouseListener(new MouseAdapter() /点击之后进入注册页面Overridepublic void mouseClicked(MouseEvent e) f.setVisible(false);new Regist(););bt_cancle =
7、new Button(重置);bt_cancle.addMouseListener(new MouseAdapter() /点击重置,使用户名框和密码框为空Overridepublic void mouseClicked(MouseEvent e) reset(););p_top = new Panel();p_top.add(l_name);p_top.add(jtf_name);p_center = new Panel();p_center.add(l_password);p_center.add(jpf_password);p_bottom = new Panel();p_bottom.
8、add(bt_ok);p_bottom.add(bt_regist);p_bottom.add(bt_cancle);f.add(p_top, BorderLayout.NORTH);f.add(p_center, BorderLayout.CENTER);f.add(p_bottom, BorderLayout.SOUTH);f.pack();f.setResizable(false);/* * 以下 的为窗体位置 的布局,使窗体置于屏幕的正中间 */toolkit = Toolkit.getDefaultToolkit();screenSize = toolkit.getScreenSiz
9、e();frameSize = f.getSize();int height = screenSize.height - frameSize.height;int width = screenSize.width - frameSize.width;f.setLocation(width / 2, height / 2);f.setVisible(true);f.addWindowListener(new WindowAdapter() /点击窗体右上角的“X”时,退出应用程序Overridepublic void windowClosing(WindowEvent e) System.exi
10、t(0););public Login() initFrame();public static void main(String args) new Login();public void reset() /设置用户名文本框和密码文本框为空jtf_name.setText();jpf_password.setText();public boolean verify(String name, String password) /验证用户的用户名和密码try Class.forName(com.mysql.jdbc.Driver);connection = DriverManager.getCon
11、nection(jdbc:mysql:/:3306/chat, root, );statement = connection.createStatement();resultSet = statement.executeQuery(select * from userTable where name= + name+ and password= + password + and state=+ n);if (resultSet.next() return true; else return false; catch (Exception e) e.printStackTrac
12、e();return false;public void setName(String name) = name;public String getName() return name;Regist.javaimport java.awt.BorderLayout;import java.awt.Button;import java.awt.Dimension;import java.awt.Frame;import java.awt.Label;import java.awt.Panel;import java.awt.TextField;import java.awt.
13、Toolkit;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swi
14、ng.JOptionPane;public class Regist Frame f;Label l_name, l_password, l_passwordAgain;TextField tf_name, tf_password, tf_passwordAgain;Button bt_ok, bt_cancle;Panel p_name, p_password, p_passwordAgain, p_bt, p_top;Toolkit toolkit;Dimension screenSize, frameSize;public void init() /初始化窗体f = new Frame(
15、regist);l_name = new Label(输入名字:);l_password = new Label(输入密码:);l_passwordAgain = new Label(确认密码:);tf_name = new TextField(20);tf_password = new TextField(20);tf_passwordAgain = new TextField(20);bt_ok = new Button(注册);bt_ok.addMouseListener(new MouseAdapter() Overridepublic void mouseClicked(MouseE
16、vent e) if (tf_password.getText().trim().equals(/判断密码框和确认密码框 的密码是否一样tf_passwordAgain.getText().trim() /一致时if (regist() /进行注册成功f.setVisible(false);/隐藏注册页面new Login().f.setVisible(true);/显示登录页面 else /密码框和确认密码框 的密码不一致时,弹出对话框JOptionPane.showMessageDialog(f, 两次密码输入有误,请重试!););bt_cancle = new Button(取消);bt
17、_cancle.addMouseListener(new MouseAdapter() /点击取消按钮时Overridepublic void mouseClicked(MouseEvent e) close();/隐藏注册窗体new Login().f.setVisible(true);/显示登录窗体);p_name = new Panel();p_name.add(l_name);p_name.add(tf_name);p_password = new Panel();p_password.add(l_password);p_password.add(tf_password);p_pass
18、wordAgain = new Panel();p_passwordAgain.add(l_passwordAgain);p_passwordAgain.add(tf_passwordAgain);p_top = new Panel();p_top.setLayout(new BorderLayout();p_top.add(p_name, BorderLayout.NORTH);p_top.add(p_password, BorderLayout.CENTER);p_top.add(p_passwordAgain, BorderLayout.SOUTH);p_bt = new Panel()
19、;p_bt.add(bt_ok);p_bt.add(bt_cancle);f.add(p_top, BorderLayout.NORTH);f.add(p_bt, BorderLayout.SOUTH);/* *以下为使窗体位于屏幕的中间 */toolkit = Toolkit.getDefaultToolkit();screenSize = toolkit.getScreenSize();int heightScreen = screenSize.height;int widthScreen = screenSize.width;f.pack();frameSize = f.getSize(
20、);int heightFrame = frameSize.height;int widthFrame = frameSize.width;f.setLocation(widthScreen - widthFrame) / 2,(heightScreen - heightFrame) / 2);f.setResizable(false);f.setVisible(true);f.addWindowListener(new WindowAdapter() /点击右上角的“X”时,隐藏注册窗体Overridepublic void windowClosing(WindowEvent e) clos
21、e(););public void close() /隐藏注册窗体f.setVisible(false);public boolean regist() /写数据的操作String name = tf_name.getText().trim();String password = tf_password.getText().trim();Connection connection = null;Statement statement = null;ResultSet resultSet = null;try Class.forName(com.mysql.jdbc.Driver);connec
22、tion = DriverManager.getConnection(jdbc:mysql:/:3306/chat, root, );statement = connection.createStatement();/查旭该用户是否存在resultSet = statement.executeQuery(select * from userTable where name= + name+ );if (resultSet.next() /存在时,弹出相应的对话框JOptionPane.showMessageDialog(f, name + 已经存在); else /不出在且不
23、为空时写入数据库if (!.equals(name) & !.equals(password) int i = statement.executeUpdate(insert into userTable(name,password) values(+ name + , + password + );if (i 0) JOptionPane.showMessageDialog(f, 注册成功!);return true; else JOptionPane.showMessageDialog(f, 注册失败!); else /用户名或密码为空时,弹出提示对话框JOptionPane.showMes
24、sageDialog(f, 用户名或密码不能为空); catch (Exception e) e.printStackTrace(); finally try resultSet.close();statement.close();connection.close(); catch (SQLException e) e.printStackTrace();return false;public Regist() init();ChatUtil.javaimport java.awt.BorderLayout;import java.awt.Button;import java.awt.Desk
25、top;import java.awt.Dimension;import java.awt.Frame;import java.awt.Label;import java.awt.Panel;import java.awt.TextArea;import java.awt.TextField;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.M
26、ouseEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .Socket;import .UnknownHostException;import java.text.Simple
27、DateFormat;import java.util.Calendar;import java.util.Date;public class ChatUtil Frame f;Label l_ip,l_name;TextField tf_ip;TextField tf_name;TextField tf_send;Button bt_record,bt_exit,bt_send;TextArea ta_msg;Panel p_ip,p_name,p_bt,p_top,p_center,p_bottom;Toolkit toolkit;Dimension screenSize,frameSiz
28、e;BufferedReader br; PrintWriter pw; public void initUtil()/初始化窗体f=new Frame(chat);l_ip=new Label(请输入服务器的ip:);l_name=new Label(请输入你的名字:);tf_ip=new TextField(15);tf_ip.setText();tf_ip.setEditable(false);tf_name=new TextField(15);tf_send=new TextField(50);tf_send.addActionListener(new ActionL
29、istener()/当在按“Enter”键时,发送信息Overridepublic void actionPerformed(ActionEvent e) send(););bt_record=new Button(历史记录);bt_record.addMouseListener(new MouseAdapter()/查看历史记录Overridepublic void mouseClicked(MouseEvent e) browse(););bt_exit=new Button(退出);bt_exit.addMouseListener(new MouseAdapter()/点击退出按钮时,退
30、出程序Overridepublic void mouseClicked(MouseEvent e) exit(););bt_send=new Button(发送);bt_send.addMouseListener(new MouseAdapter()/点击发送按钮时,发送信息Overridepublic void mouseClicked(MouseEvent e) send(););ta_msg=new TextArea();ta_msg.setEditable(false);/聊天信息的显示区p_ip=new Panel();p_ip.add(l_ip);p_ip.add(tf_ip);p
31、_name=new Panel();p_name.add(l_name);p_name.add(tf_name);p_bt=new Panel();p_bt.add(bt_record);p_bt.add(bt_exit);p_top=new Panel();p_top.setLayout(new BorderLayout();p_top.add(p_ip,BorderLayout.NORTH);p_top.add(p_name,BorderLayout.CENTER);p_top.add(p_bt,BorderLayout.SOUTH);p_center=new Panel();p_cent
32、er.add(ta_msg);p_bottom=new Panel();p_bottom.add(tf_send);p_bottom.add(bt_send);f.add(p_top,BorderLayout.NORTH);f.add(p_center,BorderLayout.CENTER);f.add(p_bottom,BorderLayout.SOUTH);f.pack();f.setResizable(false);/* * 以下是使窗体置于屏幕的中间 */toolkit=Toolkit.getDefaultToolkit();screenSize=toolkit.getScreenS
33、ize();frameSize=f.getSize();int height=screenSize.height-frameSize.height;int width=screenSize.width-frameSize.width;f.setLocation(width/2,height/2);f.setVisible(true);f.addWindowListener(new WindowAdapter()/点击右上角的“X”时,退出程序Overridepublic void windowClosing(WindowEvent e) exit();); private void initN
34、et()/初始网络的链接 try Socket s = new Socket(,8186);/以本机作为服务器进行链接 pw = new PrintWriter(s.getOutputStream(); br = new BufferedReader(new InputStreamReader(s.getInputStream(); catch (UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); private void send()/把聊天信息发送出
35、去String name=tf_name.getText();String text=tf_send.getText();String time=getTime();/获取当前的时间tf_send.setText(); pw.println(name+ +time+:+text); pw.flush();private void exit()/窗体退出System.exit(0);private String getTime()/获取当前的 时间Calendar calendar=Calendar.getInstance();Date date=calendar.getTime();Simpl
36、eDateFormat sdf=new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);/设置日期的格式return sdf.format(date);private void browse()/打开历史记录Desktop desktop=Desktop.getDesktop();File file=new File(temp.txt);try desktop.edit(file); catch (IOException e) e.printStackTrace(); public void receive()/获取服务器发来的聊天信息 try while(true
37、) String str = br.readLine(); if(str=null) return ; ta_msg.append(str+n); catch (IOException e) e.printStackTrace(); ChatUtil() this.initUtil(); this.initNet(); public static void main(String args) ChatUtil c = new ChatUtil(); c.receive(); Server.javaimport .*;import java.io.*;import java.ut
38、il.*;public class Server public static void main(String args) final int PORT = 8186;try System.out.println(wait.);ServerSocket ss = new ServerSocket(PORT);/监听8186端口ArrayList sockets = new ArrayList();/用来存储连接当服务器的客户端的socketwhile (true) Socket s = ss.accept();/客户端和服务器端建立连接System.out.println(connected.);sockets.add(s);Thread t1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多层嵌套管理办法
- 小店经营管理办法
- 市场调研管理办法
- 市场推广管理办法
- 安徽公园管理办法
- 外科感染管理办法
- 城市投递管理办法
- 定向发包管理办法
- 收方测量管理办法
- 小区送餐管理办法
- DB31/T 924-2015在用自动扶梯与自动人行道能耗估算及能效评价方法
- 摄影作品授权协议书
- 绿化补植合同协议书
- 《新能源行业投资策略》课件
- 2024年江西省永新县事业单位公开招聘教师岗笔试题带答案
- 2025至2030中国天河石项链市场需求量调研及未来投资商机研究报告
- 银行内部审计与合规工作的关联试题及答案
- 2025年水运工程试验检测师水运材料真题卷(附答案)
- 疼痛质控原因分析及整改措施
- 各类档案管理员考试试题及答案汇编
- 2024年记者证考试往年真题试题及答案
评论
0/150
提交评论