晴天-局域网通信软件设计报告

更新时间:2023-08-11 23:24:01 阅读量: 外语学习 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

晴天版局域网聊天程序

1 总体设计

此应用程序是基于MFC网络编程的一个聊天程序,主要用到了VC网络编程技术中的组播通信和异步套接字编程。为实现动态知道在线的主机,必须要在上线的时候给局域网内主机发布消息。而广播通信网络损耗较大,因此,选择了组播通信。同时,组播通信实现了局域网群聊这一功能。私聊板块主要利用数据链路层的UDP协议实现端到端通信。

2 详细设计

2.1 程序主界面

2.2 组播通信的实现

套接字建立---->绑定---->加入组播---->注册网络事件 BOOL CQtChatDlg::InitG()

{

SOCKADDR_IN local,remote;

bc_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF|WSA_FLAG_OVERLAPPED); if(INVALID_SOCKET==bc_socket)

{

MessageBox("创建多播套接字失败!");

return false;

}

local.sin_family = AF_INET;

local.sin_port = htons(MCASTPORT);

local.sin_addr.s_addr = INADDR_ANY;

remote.sin_family = AF_INET;

remote.sin_port = htons(MCASTPORT);

remote.sin_addr.s_addr = inet_addr( MCASTADDR );

if(SOCKET_ERROR==bind(bc_socket,(SOCKADDR*)&local,sizeof(local))) {

MessageBox("多播绑定失败!");

return false;

}

if(INVALID_SOCKET==(sockM=WSAJoinLeaf(bc_socket,(SOCKADDR*)&remote,sizeof(remote),NULL,NULL,NULL,NULL,JL_BOTH)))

{

MessageBox("绑定失败!");

return false;

}

if(SOCKET_ERROR==WSAAsyncSelect(bc_socket,m_hWnd,UM_SOCK,FD_READ))

{

MessageBox("注册网络读取事件失败!");

return false;

}

return true;

}

2.3 指定IP通信的实现

套接字建立---->绑定---->注册网络事件

BOOL CQtChatDlg::InitT()

{

m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0);

if(INVALID_SOCKET==m_socket)

{

MessageBox("创建套接字失败!");

return FALSE;

}

SOCKADDR_IN addrSock;

addrSock.sin_addr.S_un.S_addr=INADDR_ANY;

addrSock.sin_family=AF_INET;

addrSock.sin_port=htons(6000);

if(SOCKET_ERROR==bind(m_socket,(SOCKADDR*)&addrSock,sizeof(addrSock)))

{

MessageBox("绑定失败!");

return FALSE;

} if(SOCKET_ERROR==WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ)) { MessageBox("注册网络读取事件失败!"); return false; } return true;

}

2.4 通信方式的转换

通过选择不同的IP地址实现,233.0.0.1用于组播通信,127.0.0.1用于本机的通信测试。

3 操作方法说明

通过改变下拉列表的值可以改变通信方的IP。当IP=233.0.0.1时可以接受局域网用户上下线消息,还可以对所有运行此程序的主机发送广播消息,实现消息群发。消息的录入与发送在发送按钮左边的文本框和发送按钮实现。中间的文本框用于显示消息记录。刷新按钮用于及时获取用户在线信息。一般情况下,动态更新没有问题,不用进行刷新。程序在XP系统运行良好。

4 总 结

通过应用程序的设计,知道了端到端通信的实现细节,以及TCP和UDP在数据传输上的区别。学会了运用广播和组播通信的方式去实现信息的批量传输。总体上对数据链路层协议有了更深的理解,同时锻炼了VC的编程能力。

本文来源:https://www.bwwdw.com/article/9v1j.html

Top