计算机网络课程设计9611930353.doc

上传人:文库蛋蛋多 文档编号:2401488 上传时间:2023-02-17 格式:DOC 页数:22 大小:312.50KB
返回 下载 相关 举报
计算机网络课程设计9611930353.doc_第1页
第1页 / 共22页
计算机网络课程设计9611930353.doc_第2页
第2页 / 共22页
计算机网络课程设计9611930353.doc_第3页
第3页 / 共22页
计算机网络课程设计9611930353.doc_第4页
第4页 / 共22页
计算机网络课程设计9611930353.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《计算机网络课程设计9611930353.doc》由会员分享,可在线阅读,更多相关《计算机网络课程设计9611930353.doc(22页珍藏版)》请在三一办公上搜索。

1、黔南民族师范学院 计算机科学系计算机网络课程设计报告课题名称: 简单聊天程序 姓 名: 学 号: 专业班级: 系 (院): 计算机科学系 指导老师: 设计时间: 设计地点: 一、 实验目的和要求1. 实验目的 A。掌握网络编程的知识和技能。 B。熟悉网络软件的开发过程,锻炼解决实际问题的能力。2. 实验要求A。支持多人聊天,聊天内容可以仅仅支持文本信息。B。客户端程序具有图形化用户界面。二、 实验环境A。编程软件:EclipseB。数据库软件:MySql5.0;C。工具:jdk6.0;D。硬件环境:win7系统,Intel Core2 Duo三、 程序的逻辑框图 四、 程序的源代码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:/127.0.0.1:3306/chat, root, 19890815);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.printS

12、tackTrace();return false;public void setName(String name) this.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 j

13、ava.awt.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 j

14、avax.swing.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 = ne

15、w Frame(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 mouseClicke

16、d(MouseEvent 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 Butto

17、n(取消);bt_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

18、);p_passwordAgain = 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

19、 Panel();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.

20、getSize();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

21、 e) close(););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

22、);connection = DriverManager.getConnection(jdbc:mysql:/127.0.0.1:3306/chat, root, 19890815);statement = connection.createStatement();/查旭该用户是否存在resultSet = statement.executeQuery(select * from userTable where name= + name+ );if (resultSet.next() /存在时,弹出相应的对话框JOptionPane.showMessageDialog(f, name + 已经

23、存在); else /不出在且不为空时写入数据库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 /用户名或密码为空时,弹出提示对话框JOp

24、tionPane.showMessageDialog(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;impo

25、rt java.awt.Desktop;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

26、java.awt.event.MouseEvent;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(127.0.0.1);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(127.0.0.1,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.util.*;pub

38、lic 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 = new ChatThread(s, sockets);t1.start(); catch (IOException e) e.printStackTrace();class ChatThread extends Thread Socket s;ArrayList sockets;public ChatThread(Socket s, ArrayList sockets) this.s = s;this.sockets = sockets;public void run() /把单个客户端的信息发送给每一个客户端try

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号