目录
1.说明
网络通讯在当今已经不算新鲜事物,但大多数网络通讯都需要借助Internet上的服务器,这就给那些具有大规模内部网络的用户造成了许多问题,如浪费网络资源、遭遇到网络攻击、传播的病毒、破坏防御系统等等。由于互连网上的网络通讯工具给企业内部信息交流带来了不便,所以为了方便内部网络的用户之间的沟通,需要开发一个基于局域网的信息收发系统的即时通讯工具,实现在内部网络中进行信息的交流。本课题设计主要针对局域网通讯而开发设计的,采用的是C/S构架,类似飞鸽传书系统,来实现聊天、文件传输功能,并借助一些网络通讯组件,成功的实现了在局域网上的即时通讯。
2.系统设计
本系统主要分为文字聊天和文件传书两大部分。所以本论文将把系统分成两大模块来介绍。
2.1文字聊天模块的整体构架
本系统文字聊天是采用C/S结构,所以每个客户端也是作为服务器端的,当系统发送信息给局域网的用户,主要由单播模块和广播模块来实现,而其中的单播模块和用户信息模块是具有依赖性的,在接收信息的时候又有两个模块来完成,一是信息接收的模块,另一个是信息查看的模块。
由此可以看出本模块主要分为两模块:发送模块和接收模块。发送模块:单播模块,广播模块,用户信息模块,信息记录模块接收模块:接收信息模块,查看信息模块
综上所述,系统的架构图为:
2.2 文件传输模块的主要流程图
由于本模块采用C/S架构故将系统运行载体分为两个部分:客户端与服务器端。文件传输需要建立有效的连接后,通过TCP/IP协议实现点对点的文件传输。通信双方是通过三次握手建立连接,实现文字、文件传输,最后关闭套节字连接。其传输的整个流程图如下:
2.3系统的主要功能模块
2.3.1文字聊天的主登录界面
由于系统的用户设计是针对的用户日常活动,而非专门从事计算机操作的人员,所以本系统力求界面友好、简单,以便给用户提供一个舒适的使用环境。在文字聊天模块的主要目标是简捷,方便。
为了方便用户选取单个用户进行信息发送和查看在线用户的信息,所以设计了一个ListView来进行显示如图5,在ListView中包括了用户名、工作组、用户级数等。当有用户打开本系统的时候将会向局域网中的所有用户发送一个握手信息来获取网络中的在线用户信息并添加到列表中显示出来,同时也把自己的网络资源信息发送给对方,使自己被添加到其他用户的列表中。
登录界面,如图4所示:
进行发送的,在发送时将会把信息发送给在局域网内部的所有用户包括自己。选择用户并输入发送信息,单播发送的按钮为BitBtn2,主要是通过Id UDP Server和Id UDP Client组件来编写的,由client. Send Buffer语句来发送的,主要是对局域网内部的同一工作组用户发送信息。
广播发送的按钮为BitBtn3,主要是通过Id UDP Server和Id UDP Client组件来编写的,主要是使用了client. Broadcast来对信息,如图所示:
其中主要的代码(部分展示)为:
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);
2.3.2文字聊天信息的封装
封装是一种把多次聊天的的数据捆绑在一起,使这两者不受外界干扰和误用的机制.封装可被理解为一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意访问.对包装器内部代码与数据的访问通过一个明确定义的接口来控制.封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用.
用户密封只需选择seal选项,程序插件自动生成封装功能。并且在聊天过程中,封装的过程仍在持续,聊天的内容是边封装数据包边传输。
密封发送信息接收界面,如图所示
在点击open后显示信息。
其中实现的主要代码(部分展示)为:
BOOL TApp::PreProcMsg(MSG *msg) // for TranslateAccel & IsDialogMessage
{
for (HWND hWnd=msg->hwnd; hWnd != NULL; hWnd=::GetParent(hWnd))
{
TWin *win = SearchWnd(hWnd);
if (win != NULL)
return win->PreProcMsg(msg);
}
2.3.3聊天信息的加锁
加锁名如其实,其作用主要在于使传送的信息或者文件、文件夹只能给有password的用户看,从而加强了信息的安全程度。在现在这个网络黑客泛滥的时代,为了保护信息的隐私,加锁就更加必要了。以下为加锁信息的主要界面。
在加锁后的信息接收界面,如图所示:
点击确定后显示,如图所示:
其中主要代码(部分展示)为:
BOOL TRegistry::DeleteChildTree(LPSTR subKey)
{
charbuf[100];
BOOLret = TRUE;
if (subKey != NULL && OpenKey(subKey) != TRUE)
returnFALSE;
while (EnumKey(0, buf, sizeof(buf)))
此源码非开源,若需要此源码可扫码添加微信或者qq:2214904953进行咨询!
2600多套项目欢迎咨询