




免费预览已结束,剩余21页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
长沙理工大学网络系统课程设计报告康熙卓学 院 城南学院 专 业 通信工程 班 级 06852501 学 号 200685250114 学生姓名 康熙卓 指导教师 王静 课程成绩 完成日期 2009年7月3日 课程设计成绩评定学 院 城南学院 专 业 通信工程 班 级 06852501 学 号 200685250114 学生姓名 康熙卓 指导教师 王静 完成日期 2009年7月3日 指导教师对学生在课程设计中的评价评分项目优良中及格不及格课程设计中的创造性成果学生掌握课程内容的程度课程设计完成情况课程设计动手能力文字表达学习态度规范要求课程设计论文的质量指导教师对课程设计的评定意见综合成绩 指导教师签字 2009年7月6日课程设计任务书 城南学院 学院 通信工程 专业 课程名称计算机网络时间20082009学年第二学期1819周学生姓名康熙卓指导老师 王静题 目基于UDP协议的网络聊天程序设计主要内容:(1)熟悉UDP协议以及套节字编程原理;(2)熟悉Eclipse编程环境及Socket/ServerSocket编程方法;(3)理解C/S工作模式;(4)实现一个局域网环境下的即时通信程序;要求:(1)按要求编写课程设计报告书,能正确阐述设计结果。(2)通过课程设计培养学生严谨的科学态度,认真的工作作风和团队协作精神。(3)学会文献检索的基本方法和综合运用文献的能力。(4)在老师的指导下,要求每个学生独立完成课程设计的全部内容。应当提交的文件:(1)课程设计报告。(2)课程设计附件(源程序、各类图纸、实验数据、运行截图等)第22页 共22页 康熙卓 基于UDP协议的网络聊天程序设计 基于UDP协议的网络聊天程序设计学生姓名:康熙卓 指导老师:王静摘 要 本课程设计的目标是基于Socket/ServerSocket技术实现一个点对点通信程序,其工作机制模仿即时通信软件的基本功能,包括登陆,上线,传递信息等等。采用UDP原理,分别为客户端和服务器端完成基本数据配置,实现网络聊天功能。在设计过程中,主要采用Eclipse编程环境,使用Java语言进行程序的编写,程序通过调试运行并且经过完善后,初步实现了设计的目标,能很好地在局域网环境实现即时聊天。关键字Java语言;Eclipse;UDP;客户机/服务器;套节字1 引 言现在是网络的世界,网络发展的不可估量了,它可以包括我们生活中的方方面面,小到上网浏览新闻、上网购物,大到网上理财、网上会议,可以说网络把我们的世界变小了,即使在海角天边,只要有网络的地方我们就可以随时联系。最简单的形式就是进行网络聊天了,比如QQ、MSN等等很简单的聊天工具,可以随时拉近你我的距离。本设计将基于UDP协议和局域网环境,使用Java和Socke实现一个即时聊天程序。1.1 课程设计目的设计一个基于UDP协议的及时通信系统,实现一个局域网环境下的即时通信程序。在设计的过程中熟悉UDP协议以及套节字编程原理,熟悉Eclipse编程环境及Socket/ServerSocket编程方法的同时理解C/S工作模式。1.3 课程设计要求(1)按要求编写课程设计报告书,能正确阐述设计结果。(2)通过课程设计培养学生严谨的科学态度,认真的工作作风和团队协作精神。(3)学会文献检索的基本方法和综合运用文献的能力。(4)在老师的指导下,要求每个学生独立完成课程设计的全部内容。2开发环境介绍2.1 Eclipse简介Eclipse 是一个很让人着迷的开发环境,它提供的核心框架和可扩展的插件机制给广大的程序员提供了无限的想象和创造空间。目前网上流传相当丰富且全面的开发工具方面的插件,但是Eclipse已经超越了开发环境的概念,可以想象Eclipse将成为未来的集成的桌面环境。目前的Eclipse本身就具备资源管理和外部程序的功能,加上无所不能的插件,将构成一个丰富多彩的工作环境而不仅仅是一个IDE。Eclipse中三个最吸引人的地方:一是它创新性的图形API,即SWT/JFace,在此之前,我曾经用过Java 的AWT/SWING来开发Windows应用程序,AWT/SWING其界面客观地讲不够美观,而且界面响应速度比较慢;而SWT/JFace则大大改善了Java在这方面的能力。二是它的插件机制。三是利用它的插件机制开发的众多功能强大的插件。同时Eclipse 平台是一个具有一组强大服务的框架,这些服务支持插件,比如Java开发环境插件(JDT)、插件开发环境(PDE)和其他的第三方插件(New tool)。它由几个主要的部分构成:平台运行库、工作区、工作台、团队支持和帮助。2.2 Java语言Java语言是现在世界应用最广的支持网络计算的面向对象程序设计语言。它吸收了Smalltalk语言和C+语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下:(1)简单:Java语言丢弃了C+ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。 (2)面向对象: Java无全程变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互操作。(3)可移植性:就是在这个系统上作的程序经过一次编译后可以移植到别的系统上解释执行,只要经过简单的粘贴和复制就行了,不影响程序的效果。(4)是安全的:Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。(5)动态的:Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式1。3 设计原理3.1 TCP/IP参考模型下面首先介绍OSI参考模型及TCP/IP参考模型。OSI模型(open system interconnection reference model,开放系统互连)是基于国际标准化组织(ISO)的建议而发展起来的,它分为如图1所示的七层。当卫星和无线网络出现以后,现有的协议在和这些网络互联时出现了问题,所以需要一种新的参考体系结构,能无缝地连接多个网络。这个体系结构就是TCP/IP参考模型。 图 3-1 TCP/IP参考模型因特网在传输层有两种主要的协议:一种是面向连接的协议,一种是无连接的协议。用户数据报协议UDP是(User Datagram Protocol,用户数据报协议)在IP的数据报服务上增加了很少的一点功能,这就是复用和分用的功能以及差错检测的功能。3.2 UDP原理UDP是无连接的,即发送数据之前不需要建立连接(当然发送数据结束时也没有连接可释放)因此减少了开销和发送数据之前的时延。UDP使用的是尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。UDP是面向报文的。发送方的UDP对应程序交下来的报文,在添加首部后就向下交付给IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。3.3 UDP结构UDP属于IP下层协议,所以它的字节和ICMP中所定义的相同,格式如图3.1所示。 图3.1 UDP数据报头文件UDP是定义用来在互连网络环境中提供数据报交换的计算机通信的协议。此协议默认是IP下层协议。此协议提供了向另一用户程序发送信息的最简便的协议机制,不需要连接确认和保护复制,所以在软件实现上比较简单,需要的内存空间比起TCP相对较小。UDP包头由4个域组成,其中每个域各占用2个字节。(1)源端口号(16位):UDP数据包的发送方使用的端口号。(2)目标端口号(16位):UDP数据包的接收方使用的端口号。UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和rap协议正是采用这一机制,实现对同一时刻内多项应用同时发送和接收数据的支持。(3)数据报长度(16位)。数据报的长度是指包括报头和数据部分在内的总的字节数。理论上,包含报头在内的数据包的最大长度为65535字节。不过,一些实际应用往往会限制数据包的大小,有时会降低到8192字节。(4)校验值(16位)。UDP协议使用包头中的校验值来保证数据的安全4。3.4 UDP和TCP的比较UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。 与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。 相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突法性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。3.5 Socket/ServerSocket 在客户/服务器通信模式中,客户端需要主动创建与服务器端连接的Socket(套接字),服务器端收到了客户端的连接请求,也会创建与客户端连接的Socket,Socket可以看作是通信连接的两端的收发器。3.5客户机/服务器模式 由于Socket支持多种协议上的网络程序开发, 比如TCP、UDP、和IP等等。由于这次课程设计是实现点到点的可靠连接,所以在此使用UDP连接方式。在这个连接中,双方分为客户和服务器,他们各自的功能不同。客户机一方,UDP应用程序功能如下:(1) 打开通信信道(申请一套接字),并连接到服务器在主机的保留端口,该端口对应服务器的UDP进程。(2) 向服务器发出请求报文,等待接收应答。(3) 从服务器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进程。服务器一方,UDP应用程序动作如下:(1) 打开通信信道(申请一套接字),通知本地主机在某一保留端口接收客户机请求。(2) 等待客户请求到达指定端口。(3) 接收到请求,启动一新进程处理用户请求,同时释放旧进程以响应新的客户请求,一旦服务完成,关闭新进程与客户的通信链路。(4) 继续等待客户机请求。(5) 如果不想响应客户机请求,关闭服务器进程。综上所述,UDP应用中的服务器程序必须先于客户机进程启动,直到对客户机的响应结束或强迫终止。其面向连接的应用程序流程图如图3。图3-3 C/S模式4 设计步骤此次设计是利用ServerSocket编程编写一个基于UDP协议的网络聊天程序设计,包括用户界面的图形的设计和UDP通信两大部分。课程设计采取八人一组的团队合作形式,大家明确分工,各司其职,团结合作,以求最好的完成课程设计。而我主要负责用户界面的部分。4.1 总体设计思路基于UDP协议通信和基于TCP协议的通信不同,机遇UDP的消息传递更快,但不提供可靠性的保证。也就是说,数据在传递的时候,用户无法知道数据能否正确的到达目的地主机,也不能确定数据到达目的地的顺寻是否和发送的顺序相同。系统采用的是客户端/服务器工作模式,所以应有客户端和服务器两个类,其中客户端向服务器请求服务。而基于UDP通信的基本模式是:将数据打包,称为数据包,然后将数据包发往目的地。接受别人发来的数据包,然后查看数据包的内容。而DatagramSocketDatagramPacket就是用来支持数据报通信,DatagramSocket用于在程序之间建立传送数据报的通信连接。4.2 用户界面的设计(1)本设计中的客户端和服务器的界面基本一样。而界面是根据通信的需要设计,如图4.1所示。图4.1 客户端与服务器界面界面包括服务器和客户端选择以及其选择按钮,连接状态时显示通信时时连接还是离线,昵称是在聊天时显示信息的发送方和接收方,发送信息框就是发送信息的输入框,在界面的下面是发送、连接、关闭连接按钮,其作用就是很明显的了。(2) 监听业务逻辑设计选择监听.当选择客户端时,会显示“连接中” “连接.。在昵称中输入自己的名字,然后发信息到的服务器,在服务器上会显示昵称一内容。当选择关闭连接时,线程会断开,停止接收。(3) UDP通信设计UDP通信是指用DatagramSocket来在程序之间建立传送数据报的通信连接。4.3 用户界面图形程序编程在这次课程设计中,我的侧重点是用户界面的设计,根据编程思想编写java程序:ublic class Chat1 private JFrame frame; /建立框架对象private Container contentPane; /定义内容窗格为容器 private JTextField tf1,nickname;/文本框,输入单行文本private JTextArea ta, tb;/文本域,多行文本编辑框,增加了滚动条功能private JButton btnCon, btnSend, btnExit;/按钮private JRadioButton rb1;/复选框 单选按钮private JRadioButton rb2;/复选框 单选按钮private String strbuf = ;/定义空字符串,以后缓冲区清零用private DatagramSocket serverSocket, clientSocket;/数据报套接字上面的程序是定义用户界面所需要的一些文本框,按钮,套接字以及另外一些需要的功能。public Chat1() /构造器 frame = new JFrame(聊天程序); /初始化框架 public void initGUI() /定义窗口初始化方法上面两行是窗口的初始化。 contentPane.setLayout(new BorderLayout(); /调用内容窗格的方法-设置布局 /setLayout的参数是布局管理器对象 JPanel panel1 = new JPanel(new GridLayout(3, 1); /实例化Jpanel类的对象panel1,此处为网格布局 3行1列 JPanel p11 = new JPanel(new FlowLayout(FlowLayout.LEFT); /实例化Jpanel类的对象p11,此处为流式布局 靠左对齐 p11.setBackground(Color.BLUE); JPanel p12 = new JPanel(new FlowLayout(FlowLayout.LEFT); /实例化Jpanel类的对象p12,流式布局,左对齐上面是调用内容窗格的方法-设置布局。还因为所设想的界面不是东西南北中的界面,所以我们要做一点小小改动,那就是把界面分成三行一列进行流式布局,然后在各自的区域来设计按钮以按钮信息。 JPanel p13 = new JPanel(new FlowLayout(FlowLayout.LEFT); p13.add(new JLabel(昵称); /添加标签“昵称” nickname = new JTextField(10); /设置昵称输入框的长度 nickname.setEditable(true); /设置昵称输入框可用 p13.add(nickname); /添加昵称组件到p13面板中 panel1.add(p11); panel1.add(p12); panel1.add(p13); /将面板p11,p12,p13作为组件添加到面板pane11中 contentPane.add(panel3, BorderLayout.SOUTH); /最后把panel3添加到内容窗中Panel不是顶层窗口,它必须位于窗口或其他容器中,可以容纳其他组件,在程序中经常用于布局和定位。上面的程序就是把一些组件放置在窗口中。4.4 编译打开eclipse创建一个basicTest_kangxizhuo工程。新建一个com.briup.udp包,再新建一个Chat类。打开该类,导入下列文件包。import java.awt.*; /基本组件import java.awt.event.*; /基本事件import javax.swing.*; /扩展组件import .*; /为实现网络应用程序提供类最后把大家写的程序导入进来,就可以直接进行编译了。根据信息提示,如果有错误那就还要进行修改。4.5 运行保存程序后运行两次,出来两个个客户/服务端。将其中一个选择为客户端,另一个选择为服务器端,随后点击“连接”, 这时两个聊天程序就已经建立好连接并可以通讯了。在昵称处填上信息,然后在下面的文本框输入聊天内容并按发送按钮就可以发送出去了,聊天内容会在上面的文本框中显示出来,运行效果如图4.2,4.3所示。图4.2 运行并连接后界面上面的界面是程序运行后,然后选择服务器和客户端后进行连接后通话。图4.3 关闭连接后这是断开连接后的效果,界面显示要进行连接,在这种情况下如果发送信息,那么是失败的,不能被接受。5 总结在课程设计中在课程设计中遇到了不少问题,比如刚开始学习Java语言时,学校机房的机器总是过一段时间就自动关机,然后自己写的代码就没有了,所以做起来比较烦闷,后来老师设置了服务器,要我们把写好的代码传上去,服务了我们的同时,让我对这个产生了兴趣。同时,老师教我们的是一台主机既做服务器又做主机,然后我们就想能不能进行网络中通信,即客户端和服务器在两台不同的主机上。所以我们进行讨论,然后经过修改,我们终于实现了局域网中的通信。我们组的成员通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟是第一次接触计算机网络,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。6 结束语这次计算机网络课程设计历时两个星期,前面几天就是在机房学习应用Eclipse软件,熟悉Java语言。学到了很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。过程中也遇到了很多问题,不过及时的问老师解决问题,使我更加了解了Java语言的特点。在自己有余的时间还帮助同学调试错误,通过这次设计,进一步加深了对计算机网络的了解,让我对它有了更加浓厚的兴趣。特别是当每一步成功时,心里特别的开心。 总的来说,这次设计的基于UDP协议的网络聊天程序还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游刃而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!参 考 文 献1 於东军,杨静宇,李千目,王国全Java程序设计与应用开发北京:清华大学出版社,20052 张靓,顾慧敏 等Java案例开发中国水利水电出版社,20055 李尊朝,苏军.Java语言程序设计(第二版)北京:中国铁道出版社,20074 陆魁军 等计算机网络基础实践教程M北京:清华大学出版社,20055 谢希仁计算机网络(第四版)M北京:电子工业出版社,2003附录:设计程序清单 /程序名称:Chat1.java/程序功能:基于UDP协议的网络聊天程序设计/程序作者:胡婧/最后修改日期: 2009-7-2package com.briup;import java.awt.*;/基本组件import java.awt.event.*;/基本事件import javax.swing.*;/扩展组件import java.io.*;/输入输出流import .*;/为实现网络应用程序提供类public class Chat1 private JFrame frame; /建立框架对象private Container contentPane; /定义内容窗格为容器 private JTextField tf1,nickname;/文本框,输入单行文本private JTextArea ta, tb;/文本域,多行文本编辑框,增加了滚动条功能private JButton btnCon, btnSend, btnExit;/按钮private JRadioButton rb1;/复选框 单选按钮private JRadioButton rb2;/复选框 单选按钮private String strbuf = ;/定义空字符串,以后缓冲区清零用private DatagramSocket serverSocket, clientSocket;/数据报套接字public Chat1() /构造器 frame = new JFrame(聊天程序); /初始化框架 frame.setSize(460, 460); /设定框架 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /在默认情况下,单击关闭按钮只是关闭框架,此句用来改变默认情况,关闭运行的程序 frame.setResizable(false); /用来设置Frame窗口不能改变大小 contentPane = frame.getContentPane(); /取得内容窗格 initGUI(); /声明初始化的方法public void initGUI() /定义窗口初始化方法 contentPane.setLayout(new BorderLayout(); /调用内容窗格的方法-设置布局 /setLayout的参数是布局管理器对象 JPanel panel1 = new JPanel(new GridLayout(3, 1); /实例化Jpanel类的对象panel1,此处为网格布局 3行1列 JPanel p11 = new JPanel(new FlowLayout(FlowLayout.LEFT); /实例化Jpanel类的对象p11,此处为流式布局 靠左对齐 p11.setBackground(Color.BLUE); JPanel p12 = new JPanel(new FlowLayout(FlowLayout.LEFT); /实例化Jpanel类的对象p12,流式布局,左对齐 p12.setBackground(Color.GREEN); rb1 = new JRadioButton(服务器端); rb2 = new JRadioButton(客户端); /程序前面为声明初始化复选框类的对象,此处实例化对象 ButtonGroup bg = new ButtonGroup(); bg.add(rb1); bg.add(rb2); p12.add(rb1); p12.add(rb2); /添加了单选按钮 p12.add(new JLabel(连接状态); /添加标签到面板 tf1 = new JTextField(20); /设置文本框的列长度 tf1.setEditable(false); /设置文本框不能编辑 p12.add(tf1); /添加文本框到面板 JPanel p13 = new JPanel(new FlowLayout(FlowLayout.LEFT); p13.add(new JLabel(昵称); /添加标签“昵称” nickname = new JTextField(10); /设置昵称输入框的长度 nickname.setEditable(true); /设置昵称输入框可用 p13.add(nickname); /添加昵称组件到p13面板中 panel1.add(p11); panel1.add(p12); panel1.add(p13); /将面板p11,p12,p13作为组件添加到面板pane11中 contentPane.add(panel1, BorderLayout.NORTH); /将面板pane11作为组件添加到内容窗格中,将此组件放到边框布局的北面 JPanel panel2 = new JPanel(new FlowLayout(FlowLayout.LEFT); /实例化Jpanel类的对象panel2,此处为流式布局 左对齐 panel2.add(new JLabel(接收的信息); /将标签添加到panel2中 ta = new JTextArea(10, 30); /设置文本域的长宽 ta.setEditable(false); /设置文本域不可编辑 ta.setLineWrap(true); /自动换行 panel2.add(ta); /添加文本域到panel2中 int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED; /设置文本域垂直滚动条属性,根据需要显示 int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; /设置文本域水平滚动条属性,根据需要显示 JScrollPane Scroll = new JScrollPane(ta, v, h); /创建一个滚动条 panel2.add(Scroll); /将pane作为组件添加到panel2中 contentPane.add(panel2, BorderLayout.CENTER); /将panel2添加到内容窗格中 JPanel panel3 = new JPanel(new GridLayout(2, 1);/实例化panel3,使用网格布局 JPanel p31 = new JPanel(new FlowLayout(FlowLayout.LEFT);/实例化p31 使用流式布局,左对齐 p31.add(new JLabel( 发送信息 ); /添加标签到p31面板中 tb = new JTextArea(3, 30); /实例化并设置文本域的属性 tb.setLineWrap(true); p31.add(tb); /将标签添加到p31中 JPanel p32 = new JPanel(new FlowLayout(); /实例化p32 使用流式布局,默认对齐方式 btnCon = new JButton(连接); btnSend = new JButton(发送); btnExit = new JButton(关闭连接); /创建一个标题为“ ”的按钮(可以添加图标) btnSend.setEnabled(false); btnExit.setEnabled(false); /初值为false 开始这两个按钮不可用 p32.add(btnCon); p32.add(btnSend); p32.add(btnExit); /添加按钮到p32面板中 panel3.add(p31); panel3.add(p32); /再把p31,p32添加到panel3中contentPane.add(panel3, BorderLayout.SOUTH); /最后把panel3添加到内容窗格中 ActionListener listener = new ActionListener() /ActionListener 接口 public void actionPerformed(ActionEvent e) / 服务器端或客户端的连接 if (e.getSource() = btnCon) if (rb1.isSelected() = false & rb2.isSelected() = false) tf1.setText(请选择客户端或服务器端!); return;/当两个按钮都未被选择时,文本提示输出“请选择客户端或服务器端” try if (rb1.isSelected() = true) tb.setText(); rb1.setEnabled(false); rb2.setEnabled(false); /当rb1按钮被执行时,rb1和rb2两个按钮都不可用 /即客户端和服务器端两个按钮 Server server = new Server(); if (rb2.isSelected() = true) rb1.setEnabled(false); rb2.setEnabled(false); /当rb2按钮被执行时,rb1和rb2两个按钮都不可用 tb.setText(); Client client = new Client(); catch (Exception e1) tf1.setText(连接错误!); /如果try中的代码块有错误,则执行catch中的代码块 / 服务器端或客户端信息的发送 if (e.getSource() = btnSend)/如果发送按钮执行 try strbuf = nickname.getText()+:+tb.getText();/把文本域中的内容存到strbuf中 if (strbuf.length() 0) /如果输入字符串 ta.append(strbuf + n); /追加,聊天记录保留 tb.setText(); /清空发送消息文本框的消息 byte buffer = new bytestrbuf.length(); /buffer用作缓冲区,用于存储数据报 buffer = strbuf.getBytes(); DatagramPacket packet; /数据报if (rb1.isSelected() = true) /如果按钮1被选择,即选择服务器端,执行以下语句 packet = new DatagramPacket(buffer, buffer.length, new InetSocketAddress(localhost, 902); /括号内参数分别为:缓冲区的数据报,发送数据报的最大长度,实现 IP 套接字地址(IP 地址 + 端口号) serverSocket.send(packet); /发送数据报 if (rb2.isSelected() = true) /如果按钮2被选择,即选择客户端,执行以下语句 packet = new DatagramPacket(buffer, buffer.length, new InetSocketAddress(localhost, 901); clientSocket.send(packet); /同服务器端 catch (Exception e1) e1.printStackTrace(); / 服务器端或客户端的断开 if (e.getSource() = btnExit) /执行退出按钮 try /如果选择的是rb1或rb2,则关闭服务器或客户端接口,中断当前线程 if (rb1.isSelected() = true) serverSocket.close(); Thread.currentThread().interrupt(); if (rb2.isSelected() = true) clientSocket.close(); Thread.currentThread().interrupt(); tf1.setText(离线); /文本状态栏显示“离线” btnCon.setEnabled(true); /连接按钮可用 btnSend.setEnabled(false); /发送按钮不可用 btnExit.setEnabled(false); /退出按钮不可用 catch (Excepti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 不锈钢钓鱼钳行业深度研究分析报告(2024-2030版)
- 2025年 阿坝州汶川县招聘社区工作者考试试题附答案
- 泳池水处理设备项目风险评估报告
- 中国有机种植行业市场运行态势与投资战略咨询报告
- 双工位油压冲剪机行业深度研究分析报告(2024-2030版)
- 白蒺藜提取物项目投资可行性研究分析报告(2024-2030版)
- 2023-2029年中国公共云行业发展监测及市场发展潜力预测报告
- 法治教育基地项目计划书
- 2025年中国小麦啤酒行业市场深度分析及发展前景预测报告
- 中国透水砖行业市场发展现状及投资策略咨询报告
- 上海版小学英语单词表
- 2024版房屋租赁合同范本房屋租赁合同
- 中考考前心理疏导主题班会(课件)
- 个人门窗合同范本
- 浙江省杭州市学军中学2025届数学高一下期末统考试题含解析
- 入职申请登记表(模板)
- 生命科学导论(中国农业大学)智慧树知到期末考试答案章节答案2024年中国农业大学
- 基础护理学第七版已纠正附有答案
- 采矿学课程设计-潘三煤矿1
- 工贸企业环保相关知识培训
- 2024届内蒙古阿荣旗第一中学高一下化学期末统考模拟试题含解析
评论
0/150
提交评论