基于UDP协议的聊天程序设计报告

合集下载

基于UDP网络通信系统的服务端程序设计课程设计报告

基于UDP网络通信系统的服务端程序设计课程设计报告

长沙理工大学计算机与通信工程学院《网络协议编程》课程设计报告院系计算机与通信工程学院专业网络工程班级网络1101班学号 201158080110 学生姓名赵思雨指导教师谢晓巍课程成绩完成日期2014年9月24日课程设计成绩评定院系计算机与通信工程专业网络工程班级网络1101班学号 201158080110 学生姓名赵思雨指导教师谢晓巍指导教师对学生在课程设计中的评价指导教师成绩指导教师签字年月日课程设计答辩组对学生在课程设计中的评价答辩组成绩答辩组长签字年月日课程设计综合成绩注:课程设计综合成绩=指导教师成绩×60%+答辩组成绩×40%课程设计任务书计算机与通信工程学院网络工程专业基于UDP网络通信系统的服务端程序设计学生姓名:赵思雨指导老师:谢晓巍摘要随着网络技术的发展及人们生活的需求,网络聊天已越来越受到人们的青睐。

网络聊天已经成为人们工作生活中传递信息、交流感情的重要工具,给人们带来了很大的方便。

本课题是开发一个基于UDP的局域网聊天系统,运用软件工程的设计流程,综合运用数据库编程技术、Windows程序设计技术、网络通讯技术,此网络聊天工具采用客户端/服务器(C/S)模式,客户端采用UDP与服务器连接,客户端与客户端之间通过UDP互相通讯。

服务器端具有服务器端口设置,此聊天工具能实现多人聊天功能,适用于局域网使用的网络聊天工具,其操作简单,灵活性好,运行也比较稳定。

关键词网络通讯;客户端/服务器模型;用户数据报协议;套接字1 引言自进入信息化社会以来,人们的生活发生了翻天覆地的变化,所有这一切的实现都要归功于计算机网络。

自从计算机网络出现以来,网络发展越来越迅速,其重要性更是不可估量。

现在,网络已经进入到我们生活的各个角落,大到网上理财、网上会议、网上战争,小到上网购物、查找资料,网上聊天等,可以说网络把我们的世界变“小”了,即使在天涯海角,我们也可以随时联系。

一个最简单且应用最广泛的例子——网上聊天,就是最好的证明。

java版基于UDP协议网上聊天程序课程设计

java版基于UDP协议网上聊天程序课程设计

湖南工业大学课程设计资料袋计算机与通信学院学院(系、部)2013 ~ 2014 学年第 1 学期课程名称网络协议分析指导教师李建设职称副教授学生姓名专业班级网络工程学号题目基于UDP协议网上聊天程序成绩起止日期2013 年11 月25 日~2013 年12 月13 日目录清单56课程设计任务书2013 —2014学年第1 学期学院(系、部)计算机与通信学院专业网络工程班级102课程名称:网络工程学生姓名:设计题目:基于UDP协议网上聊天程序指导教师:李建设完成期限:自2013 年11 月25 日至2013 年12 月13 日共 3 周容及任务一、设计内容实现一个基于UDP协议的简单的聊天程序,包括服务器和客户端。

1.支持多人聊天。

2.客户端具有图形化用户界面。

二、设计任务课程设计说明书(纸质+电子版),内容包括:设计内容、系统分析(包括可行性分析、需求分析等)及功能分析;系统设计(要求画出系统整体功能框图、流程图、并给出相应地关键的代码且对所使用的主要数据结构进行说明等。

)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。

三、设计要求1.按功能要求开发系统,能正确运行。

程序代码书写规范,有充足的注释。

2.课程设计所使用的编程语言任选,但建议使用C或C++;3.绿色软件:程序运行不需安装,避免写系统和注册表;进度安排起止日期工作内容2013-11-25~2013-11-3选题2013-12-1~2013-12-3 系统分析和设计;2013-12-4~2013-12-8 熟悉软件开发工具、编码系统、系统测试2013-12-9~2013-12-13 撰写并提交课程设计说明书(含电子文档)、源程序等。

指导教师(签字):年月日系(教研室)主任(签字):年月日课程设计说明书课程名称:网络协议分析设计题目:基于UDP协议网上聊天程序专业:班级:学生姓名: 学号:指导教师:李建设2013年12 月13 日目录1 课程设计简介 (4)1.1 课程设计的目的 (4)1.2 课程设计内容 (4)2课程设计实现过程 (5)2.1 协议原理 (5)2.2 客户机/服务器模式 (7)2.3 关键技术 (8)2.4 流程图 (10)2.5 系统结构图 (11)2.6 程序调试及界面效果图 (11)2.7 源代码 (15)3设计总结 (22)4参考文献 (23)1 课程设计简介1.1 课程设计的目的开发一个专用于实现两台计算机之间即时通讯的软件,以方便两台或两台以上的计算机之间信息的交流。

基于UDP协议的聊天程序设计报告资料

基于UDP协议的聊天程序设计报告资料

- 9 - 端的线程,然后就开始检测,如果有客户端请求与服务器连接就与其建立socket连接,创建进程设置ID,告诉其他的客户端有新的客户端接入,然后开始监听所有的客户端线程如果有信息通过端口进入就接受然后再发送给其他客户端,如果有客户端退出,就会告诉其他的客户端并且关闭与该客户端的socket连接,然后在vector里面删除相应的线程。 主界面 服务器界面,当运行服务器端则出现 运行客服端登录
- 13 - 但是经过这两周的学习,我受益匪浅。首先,我进一步弄懂了JAVA语言的编程方法和原则,并学会了编写java程序。其次,使我更深层次的理解到JAVA语言是一种面向对象的语言,具有可视化编程的特点且代码具有可移植等特点。本次课程设计是实现一个UDP即时通讯程序。经过编写程序和运行,调试程序,我对java语言有了更深的了解。另外,使我对UDP协议的特点和工作过程有了更深的了解。UDP协议提供无连接的、不可靠的服务。它工作于传输层,是传输层的重要协议之一。最后,UDP协议是利用客户端和服务器端模型来实现传输的。 本次课程设计使我明白了知识的重要性,同时也更加懂得实践更不可少。我们要经常把所学的知识运用到实践,这样,才能充分的融会贯通。同时,也使我认识到自己动手能力太差,为我以后的学习和发展提供了一个警钟!本次课程设计的过程中,虽然遇到了不少问题,但最后还是成功的完成了。 这次课设对于我而言是有很大的收获,懂得独立寻找资料学习,这是最大的收获,在以后的工作中肯定会面临不懂得问题,有了这次课设的经验,就能够去独立学习并解决困难。 主要代码 package server; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

Java基于UDP协议实现简单的聊天室程序

Java基于UDP协议实现简单的聊天室程序

Java基于UDP协议实现简单的聊天室程序最近⽐较闲,⼀直在抽空回顾⼀些Java⽅⾯的技术应⽤。

今天没什么事做,基于UDP协议,写了⼀个⾮常简单的聊天室程序。

现在的⼯作,很少⽤到socket,也算是对Java⽹络编程⽅⾯的⼀个简单回忆。

先看⼀下效果:实现的效果可以说是⾮常⾮常简单,但还是可以简单的看到⼀个实现原理。

“聊天室001”的⽤户,⼩红和⼩绿相互聊了两句,“聊天室002”的⼩⿊⽆⼈理会,在⼀旁寂寞着。

看⼀下代码实现:1、⾸先是消息服务器的实现,功能很简单:•将客户端的信息(进⼊了哪⼀个聊天室等)进⾏登记;•构造UDP协议套接字对象,接受各个客户端发送的消息;•解析消息内容,将聊天信息推送回对应聊天室的各个客户端;package com.tsr.simplechat.receive_server;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .SocketException;import java.util.ArrayList;import java.util.HashMap;import com.google.gson.Gson;import com.tsr.simplechat.bean.MessageEntity;import com.tsr.simplechat.client.ChatClient;//聊天服务器public class ChatServer extends Thread {// 程序占⽤端⼝号private static final int PORT = 10000;// 消息接受套接字对象private static DatagramSocket server = null;// 字典对象(Key:聊天室ID,Value:该聊天室下的客户端⽤户集合);private static HashMap<String, ArrayList<ChatClient>> groups = new HashMap<String, ArrayList<ChatClient>>();// 构造器public ChatServer() {try {// 消息接受套接字对象的构造初始化server = new DatagramSocket(PORT);} catch (SocketException e) {e.printStackTrace();}}// 注册聊天室新登录⽤户public static void logInGroup(String groupID, ChatClient client) {// 通过聊天室ID,获取该聊天室的所有在线⽤户ArrayList<ChatClient> clients = groups.get(groupID);if (clients == null) {clients = new ArrayList<ChatClient>();}// 将此次进⼊聊天室的⽤户登记clients.add(client);// 更新聊天室信息groups.put(groupID, clients);}// 循环接收消息@Overridepublic void run() {while (true) {receiveMessage();}}private void receiveMessage() {// UDP数据包byte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);while (true) {try {// 接受数据包server.receive(packet);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 解析数据包,获取聊天信息String content = new String(packet.getData(), 0, packet.getLength()); // 通过第三⽅包解析json数据Gson gson = new Gson();MessageEntity me = gson.fromJson(content, MessageEntity.class); // 解析消息内容,通过聊天室ID,获取该聊天室的所有在线⽤户ArrayList<ChatClient> clients = groups.get(me.getGroupId());// 将接收到的消息推送回该聊天室的各个⽤户for (ChatClient client : clients) {client.pushBackMessage(me);}}}}2、客户端程序,依然很简单:•简单的定义客户端聊天室界⾯。

udp实验报告

udp实验报告

udp实验报告UDP实验报告引言:UDP(User Datagram Protocol)是一种无连接的传输协议,它在网络通信中扮演着重要的角色。

本实验旨在通过对UDP协议的实际应用,深入了解其特点和工作原理。

一、UDP的特点UDP与TCP相比,具有以下几个显著特点:1. 无连接:UDP在发送数据之前不需要建立连接,因此传输效率更高。

2. 不可靠:UDP不提供可靠的数据传输保证,数据包可能丢失、顺序错乱或重复。

3. 高效:UDP的头部开销较小,适用于对实时性要求较高的应用场景。

4. 简单:UDP的实现相对简单,占用的系统资源较少。

二、UDP的应用场景UDP广泛应用于以下场景:1. 实时通信:如音频、视频传输、实时游戏等。

由于UDP的低延迟特性,适合于对实时性要求较高的应用。

2. DNS(Domain Name System):域名解析过程中,UDP用于快速传输查询请求和响应。

3. SNMP(Simple Network Management Protocol):网络管理中,UDP用于传输管理信息。

4. TFTP(Trivial File Transfer Protocol):简单文件传输协议,基于UDP实现。

三、实验目的本实验旨在通过编写UDP程序,验证UDP协议的特点和应用场景。

四、实验环境与工具1. 操作系统:Windows 102. 编程语言:Python3. 开发工具:PyCharm4. 网络模拟器:GNS3五、实验步骤1. 设计并实现一个基于UDP的简单聊天程序,包括客户端和服务器端。

2. 在GNS3网络模拟器中配置两台虚拟机,分别作为客户端和服务器端。

3. 在客户端和服务器端分别运行聊天程序,并进行通信测试。

4. 分析测试结果,验证UDP协议的特点。

六、实验结果与分析通过测试,我们得到了以下实验结果:1. UDP传输速度较快:在实时聊天过程中,消息几乎是即时传输的,延迟较低。

2. 数据包丢失现象:由于UDP不提供可靠的传输保证,部分数据包可能会丢失,导致聊天内容不完整。

java版基于UDP协议网上聊天程序课程设计

java版基于UDP协议网上聊天程序课程设计

工业大学课程设计资料袋计算机与通信学院学院(系、部)2013 ~ 2014 学年第 1 学期课程名称网络协议分析指导教师建设职称副教授学生专业班级网络工程学号题目基于UDP协议网上聊天程序成绩起止日期2013 年11 月25 日~2013 年12 月13 日目录清单56课程设计任务书2013 —2014学年第1 学期学院(系、部)计算机与通信学院专业网络工程班级102课程名称:网络工程学生:设计题目:基于UDP协议网上聊天程序指导教师:建设完成期限:自2013 年11 月25 日至2013 年12 月13 日共 3 周容及任务一、设计容实现一个基于UDP协议的简单的聊天程序,包括服务器和客户端。

1.支持多人聊天。

2.客户端具有图形化用户界面。

二、设计任务课程设计说明书(纸质+电子版),容包括:设计容、系统分析(包括可行性分析、需求分析等)及功能分析;系统设计(要求画出系统整体功能框图、流程图、并给出相应地关键的代码且对所使用的主要数据结构进行说明等。

)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。

三、设计要求1.按功能要求开发系统,能正确运行。

程序代码书写规,有充足的注释。

2.课程设计所使用的编程语言任选,但建议使用C或C++;3.绿色软件:程序运行不需安装,避免写系统和注册表;进度安排起止日期工作容2013-11-25~2013-11-3选题2013-12-1~2013-12-3 系统分析和设计;2013-12-4~2013-12-8 熟悉软件开发工具、编码系统、系统测试2013-12-9~2013-12-13 撰写并提交课程设计说明书(含电子文档)、源程序等。

指导教师(签字):年月日系(教研室)主任(签字):年月日课程设计说明书课程名称:网络协议分析设计题目:基于UDP协议网上聊天程序专业:班级:学生: 学号:指导教师:建设2013年12 月13 日目录1 课程设计简介 (4)1.1 课程设计的目的 (4)1.2 课程设计容 (4)2课程设计实现过程 (5)2.1 协议原理 (5)2.2 客户机/服务器模式 (7)2.3 关键技术 (8)2.4 流程图 (10)2.5 系统结构图 (11)2.6 程序调试及界面效果图 (11)2.7 源代码 (15)3设计总结 (22)4参考文献 (23)1 课程设计简介1.1 课程设计的目的开发一个专用于实现两台计算机之间即时通讯的软件,以方便两台或两台以上的计算机之间信息的交流。

基于UDP协议的即时通讯程序-客户端设计

基于UDP协议的即时通讯程序-客户端设计

基于UDP协议的即时通讯程序——客户端的设计学生姓名:刘泽龙指导老师:龙际珍摘要本课程设计的目标是利用UDP协议编写相应的程序从而实现网络的即时通讯,其工作机制模仿即时通信软件的基本功能。

采用UDP协议原理,分别为客户端和服务器端完成基本数据配置,实现网络的即时通讯功能。

在本课程设计中,主要负责通讯程序客户端的设计,系统的开发平台为Windows xp,程序设计语言采用Java,程序的运行平台eclipse 。

程序通过调试、运行,初步实现了设计的目标,并且经过适当的完善后,可以应用于网络即时聊天。

关键字Java语言;即时通讯;UDP协议;套接字1 引言自进入信息化社会以来,人们的生活发生了翻天覆地的变化,所有这一切的实现都要归功于计算机网络。

自从计算机网络出现以来,网络发展越来越迅速,其重要性更是不可估量。

现在,网络已经进入到我们生活的各个角落,大到网上理财、网上会议、网上战争,小到上网购物、查找资料,网上聊天等,可以说网络把我们的世界变“小”了,即使在天涯海角,我们也可以随时联系。

一个最简单且应用最广泛的例子——网上聊天,就是最好的证明。

本课程设计将基于UDP协议[1]和局域网环境,使用Java语言实现一个即时网络通讯程序。

1.1 背景介绍随着计算机网络信息技术的日益发展和成熟,人们的生活因为网络而变得更多姿多彩,基于网络的通讯技术也如同雨后春笋般涌现到网络世界中。

TCP协议和UDP协议是网络通讯的基本协议。

而对于普通的信息交流,UDP协议则因为更方便简单,所以常常采用UDP协议开发这类即时通讯程序。

在国内占据网络通讯霸主地位则是腾讯公司的QQ原型,就是采用UDP协议开发而成的。

1.2 课程设计的目的(1)通过本课程设计,熟练掌握Java语言的编程技术、步骤和程序的编写与调试过程。

(2)理解UDP协议的基本功能和工作原理。

(3)培养运用理论知识解决实际问题的能力。

(4)理解UDP协议在Java编程语言中的具体体现。

潘睿哲 基于UDP协议的聊天工具的设计(最终版)

潘睿哲 基于UDP协议的聊天工具的设计(最终版)

研究生课程论文课程名称面向对象程序设计VC++授课学期2012 学年至2013 学年第 1 学期学院电子工程学院专业电子和通信工程学号2012011597姓名潘睿哲任课教师黄守麟李廷会交稿日期2013.4.10成绩阅读教师签名日期广西师范大学研究生学院制基于UDP协议的聊天工具的设计第一章需求分析1.1 功能需求①用户之间能够通过输入IP地址建立连接②用户能够输入所需发送的信息,并能够在界面上发看到输入的信息③用户之间可以相互通信1.2 使用平台需求安装有VS2008的操作系统,能够正常运行EXE文件。

1.3 界面的设计需求本程序利用UDP协议来进行通信,因此可以简单地将发送端和接收端集成在同一个对话框界面上,并可以通过利用多线程技术以保证接受信息功能的顺畅。

1.4 简单流程图图1-1第二章 概要设计2.1 程序总体结构图发送端 接收端图2-12.2 发送端流程 图2-22.3 接收端流程图2-3第三章 详细设计3.1 界面设计建立连接 聊天(发送、接受信息) 结 束创建套接字 创建接收线程 实现线程函数 接受消息消息转换输入消息 显示消息 发送消息 创建套接字Bind 绑定 创建套接字 输入消息 显示消息 发送消息 创建接收线程实现线程函数创建套接字 Bind 绑定图3-1说明:界面由一个对话框,两个编辑框,一个按钮和一个IP地址编辑框组成。

其中接收数据栏中的编辑框可以显示发送的信息和接收到的信息,发送数据栏中编辑框则可以编辑发送信息,按回车键后即可发送信息。

IP地址栏中可以输入需要连接的主机的IP地址。

为了美观和方便,在添加按钮后,选中按钮控件的DEFAULT和VISIALBE属性,将其设定为不可见,并通过回车能够实现按钮功能。

3.2 多线程由于该聊天工具是将利用UDP协议实现聊天功能,并将发送端和接收端(某种意义上也可以算是服务器和客户端)集成在一起,为了将发送功能和接受功能同时实现,需要用到多线程技术。

基于UDP的P2P模式的聊天程序

基于UDP的P2P模式的聊天程序

基于UDP的P2P模式的聊天程序一、课题内容和要求使用UDP协议编写聊天软件,使得客户端之间可以自由地进行键盘聊天。

【程序的具体要求】1)以图形界面运行, 提供聊天内容输入界面和收到的文字聊天内容。

2)允许客户选择不同的其他客户方(peer)进行聊天,假定已知对方的IP地址。

二、需求分析本次试验需要使用UDP协议的P2P模式,所以在试验之前应该对其进行一定了解。

UDP 是User Datagram Protocol的简称,中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

UDP是ISO 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

UDP 协议基本上是IP协议与上层协议的接口。

UDP协议适用端口分辨运行在同一台设备上的多个应用程序。

UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理UDP 数据包。

在OSI模型中,在第四层——传输层,处于IP协议的上一层。

UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

UDP用来支持那些需要在计算机之间传输数据的网络应用。

包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。

UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。

与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。

根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。

UDP协议的主要作用是将网络数据流量压缩成数据报的形式。

一个典型的数据报就是一个二进制数据的传输单位。

每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

P2P是英文Peer-to-Peer(对等)的简称,又被称为“点对点”。

UDP网络聊天实验【范本模板】

UDP网络聊天实验【范本模板】

计算机网络原理实验报告UDP网络聊天程序设计班级:计算机1301班学号:1307010116姓名:席凤凯实验五UDP网络聊天程序设计一.实验目的:编程设计基于UDP 的简单聊天室程序,实现服务器与客户端之间的对话通信功能。

二.实验原理:网络编程一般都是基于TCP 或UDP 的,一般过程如下:(1)TCP 编程的服务器端与客户端一般步骤:服务器端:1、创建一个socket,用函数socket();2、绑定IP 地址、端口等信息到socket 上,用函数bind();3、开启监听,用函数listen();4、接收客户端上来的连接,用函数accept();5、收发数据,用函数send()和recv(),或者read()和write();6、关闭网络连接;7、关闭监听;客户端:1、创建一个socket,用函数socket();2、设置要连接的对方的IP 地址和端口等属性;3、连接服务器,用函数connect();4、收发数据,用函数send()和recv(),或者read()和write();5、关闭网络连接;(2) UDP 编程步骤如下:服务器端:1、创建一个socket,用函数socket();2、绑定IP 地址、端口等信息到socket 上,用函数bind();3、循环接收数据,用函数recvfrom();4、关闭网络连接;客户端:1、创建一个socket,用函数socket();2、设置对方的IP 地址和端口等属性;3、发送数据,用函数sendto();4、关闭网络连接;三.实验内容:编辑代码:(1)服务器源程序:#include 〈stdio。

h〉标准输入输出头文件#include 〈netinet/in.h〉互联网地址族#include 〈arpa/inet。

h〉LINUX 下C 语言程序的INTERNET 定义头文件#include 〈unistd.h> 符号常量#include <fcntl。

udp聊天程序实验报告

udp聊天程序实验报告

使用Winsock控件的UDP方式实现网络聊天程序1.实验目的本次的实验的目的是会使用Winsock控件的UDP方式实现网络聊天聊天程序,以达到学会面向无连接方式的程序设计方法,并理解计算机网络课程中面向无连接的概念。

2.实验要求利用Visual Basic语言中的Winsock控件,采用UDP方式实现一个网络聊天程序。

具体要求如下:(1)能够实现用户聊天程序。

(2)具有聊天记录功能。

3.实验设计思想创建UDP应用程序比创建TCP应用程序简单,因为UDP协议不需要显式连接。

在TCP 应用程序中,服务器端的Winsock控件必须显式地进行“侦听”,而客户端的Winsock控件必须使用Connect方法来进行初始化连接。

UDP协议不需要显示连接。

要在两个客户之间发送数据,需要完成以下三步:(1)将RemoteHost属性设置为另一台计算机的名称或IP地址。

(2)将RemotePort属性设置为另一台计算机Winsock控件所绑定的LocalPort属性。

(3)调用Bind方法,指定使用的LocalPort。

在创建UDP应用程序时必须调用Bind方法。

Bind方法的作用是为控件“保留”一个本地端口。

例如,如果将控件绑定到1001端口,那么其他应用程序将不能使用该端口进行“侦听”。

该方法阻止其他应用程序使用同号的端口。

在使用UDP协议时可以任意的改变RemoteHost和RemotePort属性,同时始终保持绑定同一个LocalPot上。

因为两台计算机的地位可以看成“平等的”,这种应用程序也称为点到点的。

Winsock控件的UDP连接方式的通信规程图如下:4.实验步骤创建UDP聊天程序的某一端,如下执行:(1)创建一个新的Stand EXE工程。

(2)将默认窗体的名称修改为PeerA。

(3)将窗体的标题修改为“PeerA”。

(4)在窗体中放入一个Winsock控件,并将其命名为udpPeerA。

(5)在Winsock控件的“属性”页上,单击Protocol属性,并将该属性值修改为UDPProtocol。

基于UDP通信的聊天程序

基于UDP通信的聊天程序

课题: 基于UDP通信的聊天程序姓名:汤钦磊学号:200817010215同组姓名:李才伟专业班级:计科09101指导教师:刘国清老师设计时间:评阅意见:评定成绩:指导老师签名:年月日基于UDP通信的聊天程序1 协议介绍和使用说明1.1 协议内容本课程设计主要是基于UDP的并用Java实现的简单的聊天程序。

UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。

UDP 在传送数据之前不需要先建立连接。

对方的运输层在收到UDP 报文后,不需要给出任何确认。

虽然UDP 不提供可靠交付,但在某些情况下UDP 是一种最有效的工作方式。

虽然UDP 用户数据报只能提供不可靠的交付,但UDP 在某些方面有其特殊的优点,它有即时通信的功能。

比如说,使用聊天程序聊天的时候,省去的了跟对方通信的时候的链接的麻烦,直接进行通信。

UDP 只在IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。

UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。

UDP 是面向报文的。

UDP 没有拥塞控制,很适合多媒体通信的要求。

UDP 支持一对一、一对多、多对一和多对多的交互通信。

发送方UDP 对应用程序交下来的报文,在添加首部后就向下交付IP 层。

UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。

应用层交给UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。

接收方UDP 对IP 层交上来的UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。

1.2 关键技术1.2.1 服务器端Socket的实现Socket又称作套接字,它是使用标准Unix 文件描述符 (file descriptor) 和其它程序通讯的方式。

使用send()和recv()让你更好的控制数据传输。

在Java 网络编程中,socket相当于应用程序的港口码头;在计算机网络中,套接字由ip地址和端口号组成,为进程之间通信提供地址。

基于UDP的聊天程序实验报告

基于UDP的聊天程序实验报告

计算机网络实验报告实验名称:基于UDP的网络聊天程序实验目的及要求:通过设计网络协议及应用程序来加深理解网络各层的功能和机理,特别是对网络层、运输层、应用层的理解。

独立编写基于UDP的网络应用程序,独立上机调试程序,掌握基于UDP的网络应用基本技术。

培养独立思考问题、分析问题的能力和规范化工程设计的能力。

综合运用所学的知识去解决实践中的应用问题,掌握实验技能。

为以后的毕业设计与实际工作打下基础。

需求分析及技术路线:基于C/S的一对一聊天程序客户端对服务器呼叫,双方确认,建立连接。

双方进行消息发送。

使用c++语言在vc++6.0环境下编程。

在同一工作区内建立基于对话框的客户端client和服务器端server。

在类ClientDlg中添加函数Onsend和函数Onsendtest,Onsend用于发送消息,Onsendtest用于发送测试消息。

在类ServerDlg中添加函数Onsends,用于回复客户端的消息。

并建立类UDPClient和类UDPServer。

在类UDPClient中重载函数:UDPClient::UDPClient(CClientDlg *pdlg)用于与类ClientDlg的交互。

在类UDPClient中新建函数OnReceive,用于接收消息,记录发送方IP地址。

在类UDPServert中重载函数:UDPServer::UDPServer(CServerDlg *pdlg)用于与类ClientDlg的初始连接的确认。

在类UDPServer中新建函数OnReceive,用于接收消息,记录发送方IP地址,和记录消息。

实验(设计)方案及说明建立基于对话框的工作区UDP,在工作区内建立基于MFC AppWizard[exe] 的client 与server工程。

客户端client:界面设计与界面有关代码Server_IP 编辑框,用于输入服务器的IP地址,设计默认IP地址为127.0.0.1(给本机发送消息)接收消息列表框,用于显示对方的消息记录发送消息编辑框消息记录列表框,用于记录聊天记录(有关代码见上两图)建立连接服务器端server:界面设计与界面有关代码确认连接相关代码接收消息列表框发送并保存记录实验结果及分析运行客户端,建立连接,出现服务器端呼叫,建立连接,互相通信确认连接双方通信:分析:只有先打开客户端,并呼叫服务器,才能正确连接,否则连接出错结论UDP不面向连接,通信协议较简单。

基于UDP协议的聊天工具的方案设计书(最终版)

基于UDP协议的聊天工具的方案设计书(最终版)

研究生课程论文课程名称面向对象程序设计VC++授课学期 2012 学年至 2013 学年第 1 学期学院电子工程学院专业电子与通信工程学号 2012011597姓名潘睿哲任课教师黄守麟李廷会交稿日期 2013.4.10成绩阅读教师签名日期广西师范大学研究生学院制基于UDP协议的聊天工具的设计第一章 需求分析1.1 功能需求① 用户之间能够通过输入IP 地址建立连接② 用户能够输入所需发送的信息,并能够在界面上发看到输入的信息 ③ 用户之间可以相互通信1.2 应用平台需求安装有VS2008的操作系统,能够正常运行EXE 文件。

1.3 界面的设计需求本程序利用UDP 协议来进行通信,因此可以简单地将发送端和接收端集成在同一个对话框界面上,并可以通过利用多线程技术以保证接受信息功能的顺畅。

1.4 简单流程图图1-1第二章 概要设计2.1 程序总体结构图发送端 接收端图2-12.2 发送端流程图2-22.3 接收端流程图2-3第三章详细设计3.1 界面设计图3-1说明:界面由一个对话框,两个编辑框,一个按钮和一个IP地址编辑框组成。

其中接收数据栏中的编辑框可以显示发送的信息和接收到的信息,发送数据栏中编辑框则可以编辑发送信息,按回车键后即可发送信息。

IP地址栏中可以输入需要连接的主机的IP地址。

为了美观和方便,在添加按钮后,选中按钮控件的DEFAULT和VISIALBE属性,将其设定为不可见,并通过回车能够实现按钮功能。

3.2 多线程由于该聊天工具是将利用UDP协议实现聊天功能,并将发送端和接收端(某种意义上也可以算是服务器和客户端)集成在一起,为了将发送功能和接受功能同时实现,需要用到多线程技术。

因为在接收端接收数据时,如果数据没有来到,recvfrom函数会阻塞,从而导致程序暂停运行。

所以,将接收数据的操作放置在一个单独的线程中完成。

并给这个线程函数传递两个参数,一个是已创建的套接字,一个是对话框空间的句柄,这样,在该函数中,当接到数据后,可以将该数据传回给对话框,经过处理后显示在接受编辑框控件上。

课程设计报告-基于udp协议的网络聊天程序设计

课程设计报告-基于udp协议的网络聊天程序设计

《计算机网络编程》综合程序设计项目基于UDP协议的网络聊天程序设计院(系、部):信息工程学院姓名:班级:指导教师签名:2011年 4 月 16 日·北京目录1 需求分析 (2)1.1 课程设计目的 (2)1.2 课程设计内容 (2)1.3 课程设计要求 (2)2 概要设计 (2)2.1 原理概述 (2)2.2功能模块调用流程设计 (3)3 详细设计 (4)3.1 流程图 (4)3.2 运行效果图 (5)3.3 主要源代码 (12)4 项目分析与总结 (17)4.1 遇到的问题和解决方法 (17)4.2 心得体会 (18)1、需求分析1.1课程设计目的开发一个专用于实现两台计算机之间即时通讯的软件,以方便两台计算机之间信息的交流。

,在连接并通信时,尤其是近程的即时通讯,彻底的脱离了远程的服务器,避免了和远程服务器连接时过多的浪费网络资源。

并且避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接!因此,这个软件是极具适应性和实用性的即时通讯软件!本次课程设计的目的是学习基于UDP协议实现网络聊天程序,已达到学会面向无连接方式的程序设计方法,并理解网络编程中面向无连接的概念。

1.2课程设计的内容用户数据报(UDP)是一个无连接协议,使用这种协议时,并不需要在两台计算机之间建立固定的连接,也就是说,通信双方没有服务器和客户机之分,它们之间进行的是对等通信,所以它的优势很明显,是现代通信不可或缺的一部分。

所以,利用它的优势设计一个可以实现私聊和群聊的软件,实现两台计算机间的即时通讯。

1.3 课程设计要求基于UDP协议实现一对一的聊天和一对多的聊天,提供友好的用户界面,便于用户进行操作。

根据目前使用聊天程序的用户需求显示,用户对于聊天程序主要有以下几点要求:(1)聊天功能:可以实现实时接收和发送文字信息,并能支持公聊和私聊的方式。

(2)用户功能:可以查看对方的开放信息,以及发送方的IP。

基于UDP的网络聊天程序实验报告

基于UDP的网络聊天程序实验报告

基于UDP的网络聊天程序实验报告一、实验目的这次实验是让读者学会使用Winsock控件的UDP方式实现网络聊天程序,以达到学会面向无连接方式的程序设计方法,并理解计算机网络课程中面向无连接的概念。

二、实验要求利用Visual Basic中的Winsock控件,采用UDP方式实现一个网络聊天程序。

具体要求如下:1)能够实现用户聊天程序。

2)具有聊天记录功能。

三、程序设计的思想UDP是面向无连接的协议,在发送数据之前不必建立连接,只需要将Winsock绑定到一个端口上,其他无连接协议的Winsock若想向此处发送数据,需要指明地址和端口。

(1)将 RemoteHost 属性设置为另一台计算机的名称或者IP地址。

(2)将RemotePort 属性设置为另一台计算机Winsock控件所绑定的LocalPort 属性。

(3)调用 Bind 方法,指定使用的LocalPort服务器客户端四、关键程序说明(1)创建一个新的Standard EXE 工程。

(2)将缺省的窗体的名称修改为PeerA。

(3)将窗体的标题修改为“服务器端”。

(4)在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerA。

(5)在Winsock 控件的“属性”页上,单击“Protocol”属性,并将该属性值修改为 UDPProtocol。

(6)在窗体中添加两个TextBox控件。

将第一个命名为 txtSend,第二个命名为 txtOutput。

(7)为窗体增加如下的代码。

UDP聊天程序的一端:Private Sub Form_Load()With udpPeerA ‘控件的名字为udpPeerB.RemoteHost= "LBLiubing" ‘客户端主机名称.RemotePort = 1001 ‘连接的端口号.Bind 1002 ‘绑定到本地的端口End WithEnd SubPrivate Sub txtSend_Change()udpPeerA.SendData txtSend.Text 在键入文本时,立即将其发送出去End SubPrivate Sub udpPeerA_DataArrival (ByVal bytesTotal As Long)Dim strData As StringudpPeerA.GetData strDatatxtOutput.Text = strDataEnd SubUDP聊天程序的另一端:(1)在工程中添加一个标准窗体。

基于UDP局域网聊天软件的设计与实现

基于UDP局域网聊天软件的设计与实现


更 是 我们 普通 生 活 、 学习 、 工作 的便 利所 在 。
许 多 无 面 向 连 接 的 聊 天 软 件 MS N 和 QQ 以 及 传 输
【 收稿时间] 2 0 1 2 - 1 0 - 2 9 【 作者简介】 徐永春( 1 9 7 4 一 ) , 男, 广东理工职业学 院讲师 ; 研究方 向: 信息 系统 、 智能算法 、 网络 安全 。
Ab s t r a c t :T h i s p a p e r ma i n l y i n t r o d u c e s t h e t e c h n i c a l d e s i g n a n d he t r e s e a r c h s t a t u s o f t h e L AN v i d e o nd a t e x t u l a
f u n c t i o n o f t h e d o u b l e - e n d c h a a i n g s o f t w a r e o f he t C / S b a s e d o n UDP p r o t o c o l s .

应用 主 持: 李艳
之 相 匹 配学 院学报第 二
软件 T 兀' P就 是 使 用 的 UDP协 议 , 而 不会 因为 网络
c h a t i t ng .An d hen t i t u s e s VFW .t he s o f t wa r e ba s e o f di g i t a l v i de o s ma de b y Mi c r o s o f t Co r p t o r e a l i z e t he s i mp l e
随着 网络 宽带 业 务 的推 广 与普 及 , 加之 视 频 产
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编号:计算机网络课程设计题目:基于UDP的聊天程序系别:计算机科学与工程学院摘要随着网络技术的发展及人们生活的需求,网络聊天已越来越受到人们的青睐。

网络聊天已经成为人们工作生活中传递信息、交流感情的重要工具,给人们带来了很大的方便。

本课题是开发一个基于UDP的局域网聊天系统,运用软件工程的设计流程,综合运用数据库编程技术、Windows 程序设计技术、网络通讯技术,此网络聊天工具采用客户端/服务器(C/S)模式,客户端采用UDP与服务器连接,客户端与客户端之间通过UDP互相通讯。

服务器端具有服务器端口设置,此聊天工具能实现多人聊天功能,适用于局域网使用的网络聊天工具,其操作简单,灵活性好,运行也比较稳定。

关键词:网络通讯;客户端/服务器模型;用户数据报协议;套接字一、需求分析1.1 课程设计目的开发一个专用于实现两台计算机之间即时通讯的软件以方便两台计算机之间信息的交流。

在连接并通信时尤其是近程的即时通讯彻底的脱离了远程的服务器避免了和远程服务器连接时过多的浪费网络资源。

并且避免了服务器忙或与服务器无法连接时浪费过多时间用于和服务器建立连接因此这个软件是极具适应性和实用性的即时通讯软件本次课程设计的目的是学习基于UDP 协议实现网络聊天程序已达到学会面向无连接方式的程序设计方法并理解网络编程中面向无连接的概念。

1.2 课程设计的内容用户数据报UDP是一个无连接协议使用这种协议时并不需要在两台计算机之间建立固定的连接也就是说通信双方没有服务器和客户机之分它们之间进行的是对等通信所以它的优势很明显是现代通信不可或缺的一部分。

所以利用它的优势设计一个可以聊天的软件实现两台计算机间的即时通讯。

1.3 课程设计要求基于UDP协议实现的聊天和一对多的聊天提供友好的用户界面便于用户进行操作。

二 . UDP协议的理解:UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。

包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。

UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。

UDP协议直接位于IP(网际协议)协议的顶层。

UDP 协议的主要作用是将网络数据流量压缩成数据报的形式。

一个典型的数据报就是一个二进制数据的传输单位。

每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

UDP协议使用端口号为不同的应用保留其各自的数据传输通道。

正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。

数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。

有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。

因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。

一般来说,大于49151的端口号都代表动态端口。

数据报的长度是指包括报头和数据部分在内的总的字节数。

因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。

数据报的最大长度根据操作环境的不同而各异。

从理论上说,包含报头在内的数据报的最大长度为65535字节。

不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。

UDP协议使用报头中的校验值来保证数据的安全。

校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。

如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。

UDP协议并不提供数据传送的保证机制。

如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示,由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

三. UDP协议特点1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。

2、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。

3、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据。

4、UDP传送数据较TCP快速,系统开销也少。

5、由于缺乏拥塞控制(congestion control),需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。

换句话说,因为UDP 发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。

数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中增加主机拥塞控制来减小这个潜在的问题。

从以上特点可知,UDP提供的是无连接的、不可靠的数据传送方式,是一种尽力而为的数据交付服务。

四. 基于C/S的多客服端相互通信原理分析:在C/S模式中,它是在分散式,集中式,以及分布式基础上发展起来的一种新模型,目前大多数网络通信以及应用都属于这种模型,C/S模式将一个网络事务分为两部分,一部分是客户端(Client),他为用户提供网络请求服务的接口,另一部分是服务端(Server),它负责接受用户对服务的请求,并将这些服务透明的提供给用户,既适用于实际应用的程序,又实用于真正的计算装置,举例来说,我们到饭店吃饭时,要首先提出请求吃什么,属于客户端,饭店服务员根据请求提供相应的服务,属于服务端,至于相应的饭菜是由哪一个厨师来做,则由饭店的服务员去联系,而客户端只需要和服务器打交道就行了,从程序实现上来说,客户端和服务器打交道实际上是两个进程打交道,服务端启动server进程,并等待客户端与其联系,而客户端则启动客户进程和服务器打交道。

当服务器进程处理完一个客服进程请求的信息之后,由接着等待其他客户的请求。

五.套接字编程原理分析:图1.1 套接字编程原理图注释:socket(),使用前创建一个新的套接字;bind(),将套接字地址与所创建的套接字号联系起来;send()与recv(),数据的发送与接收;closesocket(),关闭套接字。

六、概要设计图2.1 整体框架设计图服务器端主要实现的功能是启动一个监听的进程,开放自己的端口号为7777,不断的监听是否有新的客服端进程向自己发送连接请求,为每一个主动连接自己的客户端设置一个ID号设置一个threads的容器用来管理客户端的线程。

与客户端建立连接,实现socket通信,对于服务器端是先接受数据流然后再发送数据流,客服端发送过来的信息经服务器端然后转发到其他所有的客户端,服务器端相当于中间的桥梁。

客户端要求主要实现的功能是建立一个图形的界面,用于显示聊天信息等,并且建立与服务器端的通信,主动的向服务器端发送连接请求,然后对输入文本框注册事件监听并且发送给客服端,不断的监听服务器端发来的信息,然后显示出来。

七、详细设计服务器端:图7.1 服务器端整体设计流程图客户端建立一个seversocket的类,并且创建一个vector用来管理客户端的线程,然后就开始检测,如果有客户端请求与服务器连接就与其建立socket连接,创建进程设置ID,告诉其他的客户端有新的客户端接入,然后开始监听所有的客户端线程如果有信息通过端口进入就接受然后再发送给其他客户端,如果有客户端退出,就会告诉其他的客户端并且关闭与该客户端的socket连接,然后在vector里面删除相应的线程。

主界面服务器界面,当运行服务器端则出现运行客服端登录心得体会:经过两个星期的学习和实践,我也算是顺利的完成了计算机网络课程设计,同时对计算机网络有一个大致的了解,在实践过程中遇到了很多的困难,感觉自己很难将理论与实践相结合,觉得我们学习的那些知识也派不上用场,通过这次课设,我深刻的认识到实践与理论必须要想结合才能使所学的知识变成可用的,通过自己的努力和老师同学们的帮助,多了一种看待问题的角度;我也发现了我所学知识不扎实,只是走马观花的应付考试,在以后的学习中需要时刻的告诫自己,踏踏实实做好每一步。

本次课程设计是利用java语言编写的,虽说自己以前接触过这种语言,但是经过这两周的学习,我受益匪浅。

首先,我进一步弄懂了JAVA语言的编程方法和原则,并学会了编写java程序。

其次,使我更深层次的理解到JAVA语言是一种面向对象的语言,具有可视化编程的特点且代码具有可移植等特点。

本次课程设计是实现一个UDP即时通讯程序。

经过编写程序和运行,调试程序,我对java语言有了更深的了解。

另外,使我对UDP协议的特点和工作过程有了更深的了解。

UDP协议提供无连接的、不可靠的服务。

它工作于传输层,是传输层的重要协议之一。

最后,UDP协议是利用客户端和服务器端模型来实现传输的。

本次课程设计使我明白了知识的重要性,同时也更加懂得实践更不可少。

我们要经常把所学的知识运用到实践,这样,才能充分的融会贯通。

同时,也使我认识到自己动手能力太差,为我以后的学习和发展提供了一个警钟!本次课程设计的过程中,虽然遇到了不少问题,但最后还是成功的完成了。

这次课设对于我而言是有很大的收获,懂得独立寻找资料学习,这是最大的收获,在以后的工作中肯定会面临不懂得问题,有了这次课设的经验,就能够去独立学习并解决困难。

主要代码package server;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import .ServerSocket;import .Socket;import java.util.ArrayList;import java.util.Date;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JScrollBar;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class server extends JFrame{private JTextArea allmsg;private JTextField currnum,totalnum,copyright,chatmsg;private JButton send;private JScrollPane js;int num1,num2,port;/* -- num1:当前在线人数 num2:总上线人数 port:服务端口号 --*/private ServerSocket ss;ArrayList lists;//存放所有在线用户public server(){super("聊天室服务器端");this.setSize(310,660);this.setLocation(200,50);lists = new ArrayList();num1 = num2 =0;port = 7777;currnum = new JTextField(" 当前在线人数: "+num1);currnum.setEnabled(false);totalnum = new JTextField(" 上线总人数: "+num2);totalnum.setEnabled(false);allmsg = new JTextArea();allmsg.append(" --------------- 系统消息--------------\n");allmsg.setEditable(false);allmsg.setLineWrap(true); //允许自动换行js = new JScrollPane(allmsg);//为JTextArea添加滚动条chatmsg = new JTextField("在此输入系统信息");chatmsg.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {String str = chatmsg.getText().trim();if(!"".equals(str)){sendmsg((new Date()).toLocaleString()+" -- 系统消息:"+str);chatmsg.setText("");}elseJOptionPane.showMessageDialog(null, "消息不能为空","错误",JOptionPane.OK_OPTION);chatmsg.setText("");/* -- 发送信息后,将输入栏中的信息清空 -- */ }});send = new JButton("发送");send.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {String str = chatmsg.getText().trim();if(!"".equals(str)){sendmsg((new Date()).toLocaleString()+" -- 系统消息:"+str);chatmsg.setText("");}elseJOptionPane.showMessageDialog(null, "消息不能为空","错误",JOptionPane.OK_OPTION);chatmsg.setText("");/* -- 发送信息后,将输入栏中的信息清空 -- */ }});addcomponettocontainer();this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent we){sendmsg("SYSTEM_CLOSED");/* -- 向客户端发送服务器关闭信息 -- */ destory();}});start(); /* -- 启动连接服务 -- */}public void addcomponettocontainer(){Container c = this.getContentPane();c.setLayout(null);currnum.setBounds(20,15,130,20);totalnum.setBounds(155,15,125,20);js.setBounds(10,50,280,500);chatmsg.setBounds(10,560,180,30);send.setBounds(220,560,70,30);copyright.setBounds(10,600,280,20);c.add(currnum);c.add(totalnum);c.add(js);c.add(chatmsg);c.add(send);c.add(copyright);this.setVisible(true);this.setResizable(false);}public void start(){boolean isStarted = false;/* -- 用于标记服务器是否已经正常启动 -- */ try {this.ss = new ServerSocket(port);isStarted = true;this.allmsg.append((new Date()).toLocaleString()+" 服务器启动 @ 端口: "+port+"\n");while(isStarted){Socket client = this.ss.accept(); /* -- 监听客户端的连接 -- */DataInputStream in = newDataInputStream(client.getInputStream());String name = in.readUTF();user u = new user(); = name;u.socket = client;lists.add(u); //将该用户加到列表中去num1++;num2++;currnum.setText(" 当前在线人数: "+num1);totalnum.setText(" 上线总人数: "+num2);this.allmsg.append((new Date()).toLocaleString()+" : "++" 登录 \n");new Thread(new ClientThread(u)).start();/* -- 为该用户启动一个通信线程 -- */}} catch (IOException e) {System.out.println("服务器已经启动......");System.exit(0);}}class ClientThread implements Runnable{user user = null;boolean isConnected = true;DataInputStream dis = null;DataOutputStream dos = null;public ClientThread(user u){er = u;try {this.dis = newDataInputStream(er.socket.getInputStream());this.dos = newDataOutputStream(er.socket.getOutputStream());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void run(){readmsg();}/* -- 读取客户的聊天信息 -- */public void readmsg(){while(isConnected){try {String msg = dis.readUTF();if("quit&logout".equals(msg))//当用户关闭客户端窗口时,发送quit字符串表示用户已经退出{num1--;try{this.dis.close();this.dos.close();er.socket.close();this.isConnected = false;}catch(IOException ioe){ioe.printStackTrace();}finally{this.isConnected = false;if(dis!=null) this.dis.close();if(dos!=null) this.dos.close();if(er.socket!=null) er.socket.close(); }lists.remove(er);//从列表中删除该用户currnum.setText(" 当前在线人数: "+num1);allmsg.append((new Date()).toLocaleString()+" :"++" 退出\n");}elsesendmsg(msg);} catch (IOException e) {e.printStackTrace();}}}}/* -- 将信息进行转发 -- */public void sendmsg(String msg){user us = new user();DataOutputStream os = null;if(lists.size()>0){for(int i=0;i<lists.size();i++){us = (user)lists.get(i);try {os = new DataOutputStream(us.socket.getOutputStream()); os.writeUTF(msg);} catch (IOException e) {e.printStackTrace();}}}elseJOptionPane.showMessageDialog(null, "当前无用户在线。

相关文档
最新文档