根据Java的简单网络聊天室编程.doc

上传人:小** 文档编号:4532578 上传时间:2021-09-27 格式:DOC 页数:34 大小:596.82KB
返回 下载 相关 举报
根据Java的简单网络聊天室编程.doc_第1页
第1页 / 共34页
根据Java的简单网络聊天室编程.doc_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《根据Java的简单网络聊天室编程.doc》由会员分享,可在线阅读,更多相关《根据Java的简单网络聊天室编程.doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、, TCP/IP技术课程论文题 目 基于Java的简单网络聊天室编程学 院 数理与信息工程学院 专 业 计算机科学与技术 班 级 计科092 学 号 200953225215 学生姓名 赵承宇 指导教师 沈士根 ,基于Java的简单网络聊天室编程赵承宇摘要:当前是信息网络得到飞速发展的时代,尤其是计算机和通信技术的发展和结合,深深的影响着我们的生活、学习和工作方式。其中,网络聊天工具成为人们日常交流的一种重要工具,它成本低,通信速度快,方便信息交流和资料的传递。本次开发的网络聊天系统是基于开放的Java应用程序设计的,系统采用客户机/服务器的架构模式,由客户端程序和服务器程序外加服务器端,用于

2、存放客户数据的数据库组成,使用Java提供的Socket类以及Java的多线程功能,在不同的端口上部署各类服务,可以在单个程序中同时运行多个不同进程,而客户端通过Socket发送信息给服务器,从而实现多点对多点的聊天。关键字:Java,交互性,Socket类,多线程Zhao cheng-yuAbstract:The rapid development of the information networks, especially the development and integration of computer and communication technologies, has dee

3、ply affected our lives, learning and work. Among them, the Internet chat tool becomes an important tool for daily communication, because it is low cost, fast communication and facilitat einformation exchange and data transmission. The development of the Internet chat system is designed based on open

4、 Java application. It can be dynamic, real-time information transfer and efficient interaction so that it can deal more effectively with customer requests, and is easy to maintain and update. The system will use the client / server architecture model, which includes the client program and server pro

5、grams plus server-side database used to store customer data. By using the socket class provided by java and java multi-threading capability,we can deploy various services on a different port and a number of different processes can be run simultaneously in a single program. Clients send information t

6、o the server through the socket in order to achieve multi-point-to-multipoint chat.Key words: Java, interactivity, the Socket class, multi-threaded1. 引言现在互联网越来越发达,网络聊天工具成为人们日常交流的一种重要工具,它成本低,通信速度快,方便信息交流和资料的传递,所以开发一个界面友好、易于操作的聊天工具能较好地解决电话的单线程通信以及费用高昂等问题。随着网络普及程度的提高,人们对于通信软件的要求越来越趋于简单操作,同步实时,以及更简单的网络传

7、输。本次开发的网络聊天系统是基于开放的Java应用程序设计的,能动态、实时地完成信息的传递,且具有高效的交互性,能更有效地处理客户请求,易于维护和更新。系统分为两部分:客户端和服务器端。客户端主要实现新建用户、用户登录、消息的收发功能以及群聊功能,客户端申请与服务器端建立连接,当客户端与服务器端建立连接通道后就可以像服务器端发送新建用户信息和登录信息,以及好友管理、信息编辑、发送和接收的功能;服务器端主要完成建立连接、数据库操作和监听客户三大功能,服务器端建立一个Server Socket的连接,不断侦听客户端是否建立连接或断开连接,如果有客户端申请连接就启动线程与客户端建立连接并按照客户端的

8、请求对数据库进行操作并把结果返回给客户端。2.JAVA语言概况Java是一个由Sun公司开发的新一代高级编程语言。它可在各式各样不同机器、不同操作平台的网络环境中开发软件。不论你使用的是哪种WEB浏览器,哪种计算机,哪种操作系统,只要WEB浏览器上面注明了“支持Java”,并且装有JAVA控件,你就可以看到生动的主页。Java正在逐步成为Internet应用中最主要的开发语言,它彻底改变了软件开发模式,带来了自PC机以来又一次革命,为飞速发展的网络世界增添了新的动力。总而言之java语言有简单、面向对象、分布性、安全性、多线程等特点。3. TCP/IP3.1 TCP/IP协议的特点TCP/IP

9、(Transmission Control Protocol/Internet Protocol)是传输控制协议/网际协议的缩写, TCP/IP是当今网络互联的核心协议。TCP/IP协议的体系结构共有四个层次,即应用层、传输层、网络互联层和网络接口层。IP协议的作用:第一,它是网络层的协议,提供互联网上数据传输的统一格式。第二,提供不可靠的无连接的服务。第三,定义了互联网上的传输数据的基本单元,提供了供路由选择的信息,没有差错校验和处理的机制。TCP/IP协议具有以下特点:(1)协议标准具有开放性,其独立于特定的计算机硬件及操作系统,可以免费使用。(2)统一分配网络地址,使得每个TCP/IP

10、设备在网络中都具有唯一的IP地址。(3)实现了高层协议的标准化,能为用户提供多种可靠的服务。TCP/IP协议进行传输数据传输的过程:应用程序为了传输数据会调用TCP,将数据和对应的参数传给TCP,将TCP 数据包封装在IP包内,通过网络送给目的TCP。接收方TCP在接收到数据后通知上层应用程序,TCP将保证接收数据的正确性。TCP调用IP接口,向TCP提供所有TCP需要的服务。端口号:有的时候,一个IP地址不能完整的标识一台服务器,这是应为一台物理性的计算机同时运行着多个应用程序,这就需要我们来区别同一台机子上的不同的服务,所以就在传输层和应用层上设置接口,就是端口。端口实际是一个16位长的

11、地址,他的范围是065535之间,其中01023是熟知端口,主要是给提供服务的应用程序使用,这些端口是所有应用进程都只道的,102465535为一般端口,也称动态端口、连接端口,用来随时分配要求通信的客户端应用程序。在数据传输过程中,各种服务器不断的检测分配给他的端口,一边发现要求和他通信的客户端。3.2 Socket介绍Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达

12、时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个Socket建立连接,客户端通过写Socket来通知服务器,以读Socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。服务器也通过它的本地端口连接一个socket,通过读写和客户端通信。Socket程序的工作过程:(1)建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。(2)数据通信:利用虚拟连接通道传送数据信息进行通道。(3)关闭:通信结束时,再将所建的虚拟连接拆除。具体如下:1服务器socket2监听4接收5读6写7关闭3客

13、户端etsocket6 写5 读7关闭 图1 Socket套接字原理图3.3多线程思想 多个客户同时与单个服务器连接时非常常见的。可以使用线程处理服务器上多个客户的同步问题。while (true) Socket socket = serverSocket.accept(); Thread thread = new ThreadClass(socket); thread.start();服务器套接字可以有多个连接。While循环的每次迭代创建一个新的连接。4.工程化思想分析4.1基本功能需求(1)聊天私聊:私聊就是两个之间聊天,即一对一。群聊:就是多人一起聊天,即一对多。(2)管理员踢人的管理

14、(3)注册用户4.2系统设计 (1)用户注册服务器收到用户的注册请求,便开始接受用户传递的信息,用户的名称,密码,接受完毕后,便通过后台数据库连接,然后向数据库添加记录。客户收到服务器返回的信息后,便打开主登陆窗口。(2)登陆在客户端,用户输入其用户名和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始读取数据库,然后与用户输入的信息比较,如果成功,便打开主程序窗口。进入相应的聊天室,看看到底有多少人在聊天室里,便可以私聊或则群聊。 (3)私聊私聊就是两个聊天。客户端首先发送消息到服务器端,服务器端根据发送人信息和接收者信息来转发。(4)群聊群聊,就是多人一起聊天。过程与私聊

15、差不多。唯一的不同就是服务器会将信息转发给指定的一到多个成员。 (5)管理员踢人管理员踢人的功能相当于管理员看到某个人不符合规定变现,扰乱聊天次序,可以行使权限的功能拥有踢人的功能。5. 功能模块实现5.1数据库设计public class LoginFrame extends javax.swing.JFrame implements ActionListener private javax.swing.JButton jButtonLogin;private javax.swing.JButton jButtonRegister;private javax.swing.JLabel jLa

16、bel1;private javax.swing.JLabel jLabel2;private javax.swing.JLabel jLabel3;private javax.swing.JPasswordField jPasswordFieldPw;private javax.swing.JTextField jTextFieldName;private JPanel jPanel1;private JButton jButtonManage;public LoginFrame() try UIManager.setLookAndFeel(UIManager.getSystemLookAn

17、dFeelClassName(); catch (Exception e) e.printStackTrace();initComponents(); /初始化所有控件private void initComponents() jPanel1 = new JPanel();jTextFieldName = new javax.swing.JTextField();jPasswordFieldPw = new javax.swing.JPasswordField();jButtonLogin = new javax.swing.JButton(登陆);jButtonRegister = new

18、javax.swing.JButton(注册);jLabel1 = new javax.swing.JLabel();jLabel2 = new javax.swing.JLabel();jLabel3 = new javax.swing.JLabel();getContentPane().setLayout(null);getContentPane().add(jLabel1);jLabel1.setText(聊天系统);/设置label中的字体和大小,并用粗体显示jLabel1.setFont(new Font(, Font.BOLD, 30);jLabel1.setBounds(200,

19、 100, 400, 50);getContentPane().add(jPanel1);jPanel1.setLayout(null);jPanel1.add(jLabel2);jLabel2.setText(用户名:);jLabel2.setPreferredSize(new Dimension(50, 30);jLabel2.setBounds(100, 150, 100, 30);jPanel1.add(jTextFieldName);jTextFieldName.setBounds(200, 150, 150, 30);jLabel3.setText(密 码:);jLabel3.se

20、tBounds(100, 200, 100, 30);jPanel1.add(jLabel3);jPanel1.add(jPasswordFieldPw);jPasswordFieldPw.setBounds(200, 200, 150, 30);jPanel1.add(jButtonLogin);jButtonLogin.setBounds(100, 250, 80, 20);jButtonLogin.addActionListener(this);jPanel1.add(jButtonRegister);jButtonRegister.addActionListener(this);jBu

21、ttonRegister.setBounds(200, 250, 80, 20);jButtonManage = new JButton(管理);jButtonManage.setBounds(300, 250, 80, 20);jButtonManage.addActionListener(this);jPanel1.add(jButtonManage);jPanel1.setBounds(0, 0, 500, 500);jPanel1.setVisible(true);setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_

22、CLOSE);Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();/把窗口放在屏幕中间this.setPreferredSize(new Dimension(500, 500);this.setBounds(screenSize.width/2-250, screenSize.height/2-250, 500, 500);this.setVisible(true);setResizable(false);pack();public static void main(String args) java.awt.E

23、ventQueue.invokeLater(new Runnable() public void run() new LoginFrame().setVisible(true);); /处理按钮事件public void actionPerformed(ActionEvent e) if (e.getActionCommand().equals(登陆) /如果用户按下“登陆”按钮boolean isAuthrized = DBHandler.isAuthorized(jTextFieldName.getText(), jPasswordFieldPw.getText();if (isAuthr

24、ized) int prio = DBHandler.getPrio(jTextFieldName.getText(),jPasswordFieldPw.getText();SelRoomFrame srd = new SelRoomFrame(jTextFieldName.getText(),prio);this.dispose(); else JOptionPane.showMessageDialog(this, 用户名密码不正确!);return; else if (e.getActionCommand().equals(注册) /如果用户按下“注册”按钮RegisterFrame rg

25、f = new RegisterFrame(this);this.setVisible(false); else /如果用户按下“管理”按钮if (DBHandler.isAdmin(jTextFieldName.getText(), jPasswordFieldPw.getText() ManageFrame mf = new ManageFrame(this); else JOptionPane.showMessageDialog(this, 用户名密码不正确!);return; 5.2登入选择聊天室public class LoginFrame extends javax.swing.J

26、Frame implements ActionListener private javax.swing.JButton jButtonLogin;private javax.swing.JButton jButtonRegister;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel2;private javax.swing.JLabel jLabel3;private javax.swing.JPasswordField jPasswordFieldPw;private javax.swing.JTextF

27、ield jTextFieldName;private JPanel jPanel1;private JButton jButtonManage;public LoginFrame() try /设置显示外观为本地系统外观。注意此句需放在初始化所有控件之前。UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch (Exception e) e.printStackTrace();initComponents(); /初始化所有控件private void initComponents() jPanel1

28、 = new JPanel();jTextFieldName = new javax.swing.JTextField();jPasswordFieldPw = new javax.swing.JPasswordField();jButtonLogin = new javax.swing.JButton(登陆);jButtonRegister = new javax.swing.JButton(注册);jLabel1 = new javax.swing.JLabel();jLabel2 = new javax.swing.JLabel();jLabel3 = new javax.swing.J

29、Label();getContentPane().setLayout(null);getContentPane().add(jLabel1);jLabel1.setText(聊天系统);/设置label中的字体和大小,并用粗体显示jLabel1.setFont(new Font(, Font.BOLD, 30);jLabel1.setBounds(200, 100, 400, 50);getContentPane().add(jPanel1);jPanel1.setLayout(null);jPanel1.add(jLabel2);jLabel2.setText(用户名:);jLabel2.s

30、etPreferredSize(new Dimension(50, 30);jLabel2.setBounds(100, 150, 100, 30);jPanel1.add(jTextFieldName);jTextFieldName.setBounds(200, 150, 150, 30);jLabel3.setText(密 码:);jLabel3.setBounds(100, 200, 100, 30);jPanel1.add(jLabel3);jPanel1.add(jPasswordFieldPw);jPasswordFieldPw.setBounds(200, 200, 150, 3

31、0);jPanel1.add(jButtonLogin);jButtonLogin.setBounds(100, 250, 80, 20);jButtonLogin.addActionListener(this);jPanel1.add(jButtonRegister);jButtonRegister.addActionListener(this);jButtonRegister.setBounds(200, 250, 80, 20);jButtonManage = new JButton(管理);jButtonManage.setBounds(300, 250, 80, 20);jButto

32、nManage.addActionListener(this);jPanel1.add(jButtonManage);jPanel1.setBounds(0, 0, 500, 500);jPanel1.setVisible(true);setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();/把窗口放在屏幕中间this.setPreferredSize(new Dimension(5

33、00, 500);this.setBounds(screenSize.width/2-250, screenSize.height/2-250, 500, 500);this.setVisible(true);setResizable(false);pack();public static void main(String args) java.awt.EventQueue.invokeLater(new Runnable() public void run() new LoginFrame().setVisible(true);); /处理按钮事件public void actionPerf

34、ormed(ActionEvent e) if (e.getActionCommand().equals(登陆) /如果用户按下“登陆”按钮boolean isAuthrized = DBHandler.isAuthorized(jTextFieldName.getText(), jPasswordFieldPw.getText();if (isAuthrized) int prio = DBHandler.getPrio(jTextFieldName.getText(),jPasswordFieldPw.getText();SelRoomFrame srd = new SelRoomFram

35、e(jTextFieldName.getText(),prio);this.dispose(); else JOptionPane.showMessageDialog(this, 用户名密码不正确!);return; else if (e.getActionCommand().equals(注册) /如果用户按下“注册”按钮RegisterFrame rgf = new RegisterFrame(this);this.setVisible(false); else /如果用户按下“管理”按钮if (DBHandler.isAdmin(jTextFieldName.getText(), jPa

36、sswordFieldPw.getText() ManageFrame mf = new ManageFrame(this); else JOptionPane.showMessageDialog(this, 用户名密码不正确!);return;public class SelRoomFrame extends JFrame implements ActionListener private JRadioButton jRBut1 = new JRadioButton(谈天说地);private JRadioButton jRBut2 = new JRadioButton(缘分天空);priv

37、ate JRadioButton jRBut3 = new JRadioButton(休闲娱乐);private JButton entBut = new JButton(进入);private JButton exitBut = new JButton(退出);private JLabel jLabel= new JLabel(请选择聊天室);private final ButtonGroup group = new ButtonGroup( );private String room;private String name;private int prio;public SelRoomFr

38、ame(String name, int prio)try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch(Exception e) e.printStackTrace(); this.name = name;this.prio= prio;init();private void init()getContentPane().setLayout(null);jLabel.setFont(new Font(, Font.BOLD, 30);jLabel.setBounds(100, 30, 200

39、, 50);jRBut1.setSelected(true);jRBut1.setBounds(100,100,200,30);jRBut2.setBounds(100,150,200,30);jRBut3.setBounds(100,200,200,30);entBut.setBounds(100,250,80,30);exitBut.setBounds(200,250,80,30);group.add(jRBut1);group.add(jRBut2);group.add(jRBut3);getContentPane().add(jRBut1);getContentPane().add(j

40、RBut2);getContentPane().add(jRBut3);getContentPane().add(entBut);getContentPane().add(exitBut);getContentPane().setPreferredSize(new Dimension(400, 400);getContentPane().setBounds(0,0,400,400);getContentPane().add(jLabel);entBut.addActionListener(this);exitBut.addActionListener(this);Dimension scree

41、nSize = Toolkit.getDefaultToolkit().getScreenSize();/ 把窗口放在屏幕中间this.setPreferredSize(new Dimension(400, 400);this.setBounds(screenSize.width / 2 - 250, screenSize.height / 2 - 250,400, 400);this.setVisible(true);setResizable(false);pack();public void actionPerformed(ActionEvent e) if(e.getActionComm

42、and().equals(进入)String choice = getSelButton().getText();if(choice.equals(谈天说地)room = 谈天说地;else if(choice.equals(缘分天空) ) room =缘分天空; else /休闲娱乐room =休闲娱乐;ChatFrame chatframe = new ChatFrame(name,room,prio);this.dispose();public AbstractButton getSelButton()Enumeration e = group.getElements();while(e

43、.hasMoreElements()AbstractButton ab = e.nextElement();if(ab.isSelected()return ab;return null;5.3注册public class RegisterFrame extends javax.swing.JFrame implements ActionListener private javax.swing.JButton jButtonReg;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel2;private javax.swing.JLabel jLabel3;private javax.swing.JLabel jLabel4;private javax.swing.JLabel jLabel5;private javax.swing.JTextField jTextFieldName;pri

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁