069_局域网飞鸽传书软件(c语言)
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
研究项目的目的以及意义
随着互联网技术的迅猛发展,网络给人们带来了很多便利,比如人们借助于网络进行相互交流变得更加方便。聊天工具作为互联网中运用最为广泛的通信工具之一,如今都已被广大网民接受。很多人都使用过飞鸽传书软件,飞鸽传书发展到现在已经具有了很多功能:有文字聊天、文件、文件夹传输的基本功能,也有密封、加锁等较为复杂的功能。本毕业设计的目的主要是为了检查使学生综合运用以前所学知识(包括以前所学的一些关于网络、编程、信息安全等知识)的能力,模拟局域网飞鸽传书软件,开发一个天系统软件,本毕业设计主要实现局域网内文字聊天及文件传输等功能。
【买计算机毕业论文就到www.think58.com】 think58.com [来源:http://www.think58.com]
1.5 Win Socket的寻址方式
因为Winsock要兼容多个协议,所以必须使用通用的寻址方式。TCP/IP使用地址和端口号来指定一个地址,但是其它协议也许采用不同的形式。如果Winsock强迫使用特定的寻址方式,添加其他协议就不大可能了。在Winsock中,应用程序员通过SOCKADDR_IN结构来指定IP地址和端口号。定义如下:
Struct sockaddr_in{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
har sin_zero[8];
};
应用程序可以使用inet_addr函数将一个小数点分隔的十进制IP地址字符串转化成由32位二进制数表示的IP地址。inet_ntoa函数将一个网络字节顺序的32位IP地址转化字符串。注意:inet_addr返回的32位二进制数是用网络顺序存储的。
2 系统需求分析
2.1系统设计目标
根据对飞鸽传输系统的调研,我认为本设计需要满足以下几个系统设计目标:
(1)实用性原则:真正为局域网的实际工作服务,按照需求的轻重缓急,合理设计本系统。
(2)可靠性原则:必须为用户提供安全的服务,尤其是要保证传输的稳定性。
(3)友好性原则:使用本系统的用户相当一部分对计算机知识了解很少,所以系统操作上要求简单方便,便于用户掌握。 copyright think58
[资料来源:http://THINK58.com]
(4)可扩展性原则:采用开放的标准和接口,便于系统向更大的规模和功能扩展。
2.2系统总体需求分析
根据用户需求,本系统分为两个子系统:1:局域网内简单文字聊天子系统,它是在局域网内选择相应的用户,以便对之发送文字信息,2:文件、文件夹传输系统,它是在先把需要传输的文件、文件夹转换成相就的数据流传关,到了目的主机再由之还原。本系统的文字聊天系统实现的功能类似于QQ用户之间的聊天。在设计系统时,应根据简洁、流畅的特点安排布局,在编制程序时应充分考虑这一点传输的稳定、快捷,真正做到“简洁、高效、流畅、安全”的使用环境。用户使用的过程为,先是用户登开启本软件,软件自动检索局域网的其它用户,并以之成为用户列表,让用户选择。当用户发现所要连接的用户之后,双击该用户,则出现发送窗口。用户用之来发送消息或者文件。接收方可以选择接收或者拒绝相应的传输文件。
2.3组织结构的分析
以下为组织结构图:
[来源:http://think58.com]
[资料来源:http://think58.com]
think58
图1 组织结构图
2.3.1开发运行环境
开发此系统所需的基本软、硬件环境为:
(1).Windows95、 Windows98 或WindowsNT/2000/XP;
(2).Pentium100及以上档次的IBM PC及其兼容机;
(3).128M以上内存措施;
(4).1G以上可用硬盘空间;
(5).VGA显示器;
以上的配置均要求为在同一局域网内的两台或两台以上。
2.3.2系统开发语言
本系统采用VC/VC++语言开发。VC/VC++是前些年迅速发展和推广的一种计算机语言,近年来,已经相当的完善。它主要特点有两个方面:一是全面兼容C,二是支持面向对向的方法。.
3 理论知识
3.1 C/S软件架构技术
C/S(Client/Server)结构,即大家熟知的客户机/服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。 [资料来源:http://think58.com]
传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。
3.2 用户数据报协议(UDP)
UDP(User Datagram Protocol):用户数据包协议,它和TCP一样位于传输层,和IP协议配合使用,在传输数据时省去包头,但它不能提供数据包的重传,所以适合传输较短的文件。
由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用UDP的“端口号”完成的。源端口号标识了请求域名服务的本地机的应用程序,同时需要将所有由目的站生成的响应包都指定到源主机的这个端口上。与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能等。由于UDP比较简单,UDP头包含很少的字节,比TCP负载消耗少,所以UDP适用于不需要TCP可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。
think58
[资料来源:www.THINK58.com]
3.3单播、广播、组播浅析
硬件组播(multicasting)是一种多点投递的形式,它使用硬件技术,通过使用大量组播地址来通信。当某一组机器需要通信时,选择一个组播地址,并配置好相应的网络接口硬件,识别组播地址,从而收到该组播地址上分组的拷贝。广播(broadcasting)是多点投递的最普遍的形式,它向每一个目的站投递一个分组的拷贝。它可以通过多个单次分组的投递完成,也可以通过单独的连接传递分组的拷贝,直到每个接收方均收到一个拷贝为止。
在多数网络中,用户是通过把分组分送给一个特殊保留的地址即广播地址(broadcast address)来进行广播投递,它的主要缺点是会耗费大量的主机资源和网络资源。
单播(unexacting)是指只有一个目的地的数据报传递。从投递目的地的数量而言,单播和广播均可看作是组播的一个子集。单播可以看作仅包括一台机器群组的组播;广播可以看作包含了所有机器群组的组播。但从数据报的投递方式而言,单播、广播和组播还是有较大的区别。
4 系统设计
本系统主要分为文字聊天和文件传书两大部分。所以本论文将把系统分成两大模块来介绍。
4.1 文字聊天模块的整体构架
本系统文字聊天是采用C/S结构,所以每个客户端也是作为服务器端的,当系统发送信息给局域网的用户,主要由单播模块和广播模块来实现,而其中的单播模块和用户信息模块是具有依赖性的,在接收信息的时候又有两个模块来完成,一是信息接收的模块,另一个是信息查看的模块。 内容来自think58 [来源:http://think58.com]
由此可以看出本模块主要分为两模块:发送模块和接收模块。发送模块:单播模块,广播模块,用户信息模块,信息记录模块接收模块:接收信息模块,查看信息模块
综上所述,系统的架构图为: think58好,好think58 [资料来源:http://think58.com]
[资料来源:http://think58.com]
think58好,好think58 [资料来源:http://THINK58.com]
[来源:http://www.think58.com]
本文来自think58
think58好,好think58 [资料来源:http://THINK58.com]
图2 系统结构图
4.2 文件传输模块的主要流程图
由于本模块采用C/S架构故将系统运行载体分为两个部分:客户端与服务器端。文件传输需要建立有效的连接后,通过TCP/IP协议实现点对点的文件传输。通信双方是通过三次握手建立连接,实现文字、文件传输,最后关闭套节字连接。其传输的整个流程图如下:
[版权所有:http://think58.com]
内容来自think58 [资料来源:www.THINK58.com]
copyright think58
[资料来源:http://www.THINK58.com]
think58 [资料来源:http://think58.com]
copyright think58
图3 结构流程图
4.3系统的主要功能模块
4.3.1文字聊天的主登录界面
由于系统的用户设计是针对的用户日常活动,而非专门从事计算机操作的人员,所以本系统力求界面友好、简单,以便给用户提供一个舒适的使用环境。在文字聊天模块的主要目标是简捷,方便。
为了方便用户选取单个用户进行信息发送和查看在线用户的信息,所以设计了一个ListView来进行显示如图5,在ListView中包括了用户名、工作组、用户级数等。当有用户打开本系统的时候将会向局域网中的所有用户发送一个握手信息来获取网络中的在线用户信息并添加到列表中显示出来,同时也把自己的网络资源信息发送给对方,使自己被添加到其他用户的列表中。 copyright think58
[资料来源:http://think58.com]
登录界面,如图4所示:
copyright think58 [资料来源:http://www.THINK58.com]
图4 启动主界面 [资料来源:www.THINK58.com]
进行发送的,在发送时将会把信息发送给在局域网内部的所有用户包括自己。选择用户并输入发送信息,单播发送的按钮为BitBtn2,主要是通过Id UDP Server和Id UDP Client组件来编写的,由client. Send Buffer语句来发送的,主要是对局域网内部的同一工作组用户发送信息。
广播发送的按钮为BitBtn3,主要是通过Id UDP Server和Id UDP Client组件来编写的,主要是使用了client. Broadcast来对信息,如图5所示:
think58 [来源:http://think58.com]
[资料来源:www.THINK58.com]
图5 用户选择图
其中主要的代码为:
void TMsgApp::InitWindow(void)
{
WNDCLASS wc;
HWND hWnd;
char class_name[MAX_PATH] = IPMSG_CLASS, *tok, *msg, *p;
ULONG nicAddr = 0;
int port_no = atoi(cmdLine);
if (port_no == 0)
port_no = IPMSG_DEFAULT_PORT;
if ((tok = strchr(cmdLine, '/')) && separate_token(tok, ' ', &p))
{
BOOL diag = TRUE;
DWORD status = 0xffffffff;
if (stricmp(tok, "/NIC") == 0) // NIC {
if (tok = separate_token(NULL, ' ', &p))
nicAddr = ResolveAddr(tok);
}
else if (stricmp(tok, "/MSG") == 0)
{
MsgMng msgMng(nicAddr, port_no);
ULONG command = IPMSG_SENDMSG|IPMSG_NOADDLISTOPT|IPMSG_NOLOGOPT, destAddr;
while ((tok = separate_token(NULL, ' ', &p)) != NULL && *tok == '/') {
if (stricmp(tok, "/LOG") == 0)
command &= ~IPMSG_NOLOGOPT;
else if (stricmp(tok, "/SEAL") == 0)
think58好,好think58 [资料来源:http://THINK58.com]
command = IPMSG_SECRETOPT;
}
if ((msg = separate_token(NULL, 0, &p)) != NULL)
{
diag = FALSE;
if ((destAddr = ResolveAddr(tok)) != NULL)
status = msgMng.Send(destAddr, htons(port_no), command, msg) ? 0 : -1;
}
}
if (nicAddr == 0)
{
if (diag)
MessageBox(0, "ipmsg.exe [portno] [/MSG [/LOG] [/SEAL] <hostname or IP addr> <message>]\r\nipmsg.exe [portno] [/NIC nic_addr]", MSG_STR, MB_OK);
::ExitProcess(status);
return;
}
}
think58好,好think58 [资料来源:www.THINK58.com]
本文来自think58 [资料来源:http://think58.com]