基于UDP协议的网络聊天程序设计.docx

上传人:b****5 文档编号:7386052 上传时间:2023-05-11 格式:DOCX 页数:15 大小:229.14KB
下载 相关 举报
基于UDP协议的网络聊天程序设计.docx_第1页
第1页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第2页
第2页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第3页
第3页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第4页
第4页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第5页
第5页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第6页
第6页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第7页
第7页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第8页
第8页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第9页
第9页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第10页
第10页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第11页
第11页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第12页
第12页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第13页
第13页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第14页
第14页 / 共15页
基于UDP协议的网络聊天程序设计.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于UDP协议的网络聊天程序设计.docx

《基于UDP协议的网络聊天程序设计.docx》由会员分享,可在线阅读,更多相关《基于UDP协议的网络聊天程序设计.docx(15页珍藏版)》请在冰点文库上搜索。

基于UDP协议的网络聊天程序设计.docx

基于UDP协议的网络聊天程序设计

实验报告

 

实验名称:

基于UDP的聊天系统

课程名称:

计算机网络编程

 

班级:

计122

姓名:

学号:

*******

 

信息工程学院计算机系

1、需求分析.........................................................................................1

1.1课程设计目的................................................................................1

1.2课程设计内容................................................................................1

1.3课程设计要求................................................................................1

2、概要设计.......................................................................................1

2.1原理概述........................................................................................1

2.2功能模块调用流程设计.................................................................2

3详细设计...........................................................................................3

3.1流程图.........................................................................................3

3.2运行效果图....................................................................................4

3.3功能实现........................................................................................5

3.3.1DES算法加密解密......................................................................5

3.3.2窗口震动.....................................................................................8

3.3.3保存聊天记录.............................................................................9

4项目分析与总结..............................................................................10

4.1遇到的问题和解决方法...............................................................10

4.2心得体会.......................................................................................10

 

1、需求分析 

1.1课程设计目的 

开发一个专用于实现两台计算机之间即时通讯的软件,以方便两台计算机之间信息的交流。

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

并且避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接!

因此,这个软件是极具适应性和实用性的即时通讯软件!

本次课程设计的目的是学习基于UDP协议实现网络聊天程序,已达到学会面向无连接方式的程序设计方法,并理解网络编程中面向无连接的概念。

 

 

1.2课程设计的内容 

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

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

 

 

1.3 课程设计要求 

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

 

根据目前使用聊天程序的用户需求显示,用户对于聊天程序主要有以下几点要求:

 

(1)聊天功能:

可以实现实时接收和发送文字信息,并能支持公聊和私聊的方式。

 

(2)用户功能:

可以查看对方的开放信息,以及发送方的IP。

  

2 概要设计 

2.1 原理概述 

用户数据报协议(User Datagram Protocol)是 OSI 参考模型中一种无连

接的传输层协议,提供面向事务的简单不可靠信息传送服务。

是一个简单的面向数据报的传输层协议,IETF RFC 768是UDP的正式规范。

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

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

  与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。

由于 UDP 比较简单, UDP 头包含很少的字节,比TCP负载消耗少。

  

UDP适用于不需要TCP可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。

 UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)、动态主机配置协议(DHCP)、路由信息协议(RIP)和某些影音串流服务等等。

采用UDP协议,通过服务器中转方式。

因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。

UDP 协议是不可靠协议,它只管发送,不管对方是否收到。

但它的传输很高效,因为UDP协议排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

例如,腾讯采用了上层协议来保证可靠传输:

如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。

如此来保证消息可以无遗漏传输。

 

2.2功能模块调用流程设计:

 

 

 

3 详细设计

3.1流程图

 

 

 

 

 

 

 

 

3.2界面设计与运行效果图

//界面设计

//群聊界面

//私聊界面

 

3.3功能实现

3.3.1DES算法加密、解密

DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。

明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

//加密解密流程图

 

加密代码:

privatestaticbyte[]Keys={0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF};

///

///DES加密字符串

///

///待加密的字符串

///

///

publicstringEncryptDES(stringencryptString)

{

try

{

byte[]rgbKey=Encoding.UTF8.GetBytes(textBox2.Text);

byte[]rgbIV=Keys;

byte[]inputByteArray=Encoding.UTF8.GetBytes(encryptString);

DESCryptoServiceProviderdCSP=newDESCryptoServiceProvider();

MemoryStreammStream=newMemoryStream();

CryptoStreamcStream=newCryptoStream(mStream,dCSP.CreateEncryptor(rgbKey,rgbIV),CryptoStreamMode.Write);

cStream.Write(inputByteArray,0,inputByteArray.Length);

cStream.FlushFinalBlock();

returnConvert.ToBase64String(mStream.ToArray());

}

catch

{

returnencryptString;

}

}

加密前:

(加密das字符串)

加密后:

 

解密代码:

///

///DES解密字符串

///

///

///

///

publicstringDecryptDES(stringdecryptString)

{

try

{

byte[]rgbKey=Encoding.UTF8.GetBytes(textBox2.Text);

byte[]rgbIV=Keys;

byte[]inputByteArray=Convert.FromBase64String(decryptString);

DESCryptoServiceProviderDCSP=newDESCryptoServiceProvider();

MemoryStreammStream=newMemoryStream();

CryptoStreamcStream=newCryptoStream(mStream,DCSP.CreateDecryptor(rgbKey,rgbIV),CryptoStreamMode.Write);

cStream.Write(inputByteArray,0,inputByteArray.Length);

cStream.FlushFinalBlock();

returnEncoding.UTF8.GetString(mStream.ToArray());

}

catch

{

returndecryptString;

}

}

解密前:

解密后:

(解密后为das)

 

3.3.2窗口震动

//流程图

//点击震动按钮

privatevoidbutton3_Click(objectsender,EventArgse)

{

IPAddressmyIP;

//获得本机局域网IP地址

myIP=newSystem.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);

IPAddressip=IPAddress.Parse(txt_ip.Text.Trim());

IPEndPointipto=newIPEndPoint(ip,6000);

byte[]byMsg=System.Text.Encoding.UTF8.GetBytes(EncryptDES("1"));

SocketsockSend=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);

sockSend.SendTo(byMsg,ipto);

}

}

//接收方接收到字符串后窗口震动

voidRecvMsg()

{

while(true)

{

intlen=sockRecv.ReceiveFrom(byMsg,refsenderRemote);

if(DecryptDES(System.Text.Encoding.UTF8.GetString(byMsg,0,len))=="1")

{

for(intj=0;j<30;j++)

{

for(inti=1;i<5;i++)

{

Thread.Sleep(10);

this.Left-=1;

this.Top-=1;

}

for(inti=1;i<5;i++)

{

Thread.Sleep(10);

this.Left+=1;

this.Top+=1;

}

}

}

else

txt_recvmsg.AppendText(((IPEndPoint)senderRemote).Address.ToString()+":

"

+DecryptDES(System.Text.Encoding.UTF8.GetString(byMsg,0,len))+"\r\n");

}

}

3.3.3保存聊天记录

//保存源代码

privatevoidbutton2_Click(objectsender,EventArgse)

{

StreamWritersw=newStreamWriter("D:

\\私聊信息.txt");

sw.WriteLine(this.txt_recvmsg.Text);//开始写入值

sw.Close();

}

privatevoidbutton2_Click_1(objectsender,EventArgse)

{

StreamWritersw=newStreamWriter("D:

\\群聊信息.txt");

sw.WriteLine(this.MessageOutput.Text);//

sw.Close();

}

 

 4项目分析与总结 

4.1遇到的问题和解决方法:

 

 在创建窗体时,由于对有些控件不了解,所以在应用时,查找了一些相关资料,学会

了如何添加和使用。

其中有段程序是选择现有文件夹里的ico图标,但是由于没有把图片放在指定的地方,所以在运行时,总是提示找不到指定的文件。

这个程序中有段功能是选择群聊中的任何一个IP可以进行私聊,之前由于没有实现去除重复IP的内容,在显示时,当一个IP连续发送两条信息时,下拉框中会显示两个相同的IP,为了实现唯一性,加了一个嵌套循环,当两个IP相同时,去掉后一个。

 

主要注意以下几点:

 

1. UDP多播地址的范围:

224.0.0.0---239.255.255.255  

2. JoinMulticastGroup方法将套接字加入多播组。

 

JoinMulticastGroup(IPAddress multicastAddr, int timeToLive) multicastAddr为要连接的多播地址,timeToLive为生存时间TTL  

3. DropMulticastGroup方法退出多播组。

 

DropMulticastGroup(IPAddress multicastAddr, int ifindex) 

multicastAddr为要连接的多播地址,ifindex为要退出多播组的本地地址  

4.  UTF-8是UNICODE的一种变长字符编码又称万国码,UTF-8用1到6个字节编码UNICODE字符。

用在网页上可以同一页面显示中文简体繁体及其它语言(如日文,韩文) 

 

4.2心得体会 

这次实验是在边学习边实践的基础上完成的,通过学习“计算机网络编程”,我们对网络的基础知识打下了很好的基础。

这次网络实验可以说是在理解网络的基础上对编程的一次学习过程,虽然做的不是很完善,但也学到了很多知识。

例如,vs2008的使用和对c#语句的理解都有了很大的提高。

这对自己以后进行网络开发有很大的帮助。

 

PS:

要完整代码的Q842233628

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2