基于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协议实现聊天功能,并将发送端和接收端(某种意义上也可以算是服务器和客户端)集成在一起,为了将发送功能和接受功能同时实现,需要用到多线程技术。

  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, "当前无用户在线。

相关文档
最新文档