首页 理论教育UDP通信及局域网P2P软件开发

UDP通信及局域网P2P软件开发

【摘要】:UDP的格式也是由命令号和附带数据两部分组成。但是UDP必须先使用结构体对命令号和数据进行打包后再发送,因为UDP不执行正确性检查。创建工程名为“f”的对话框程序,用于演示UDP打包以及局域网P2P软件的开发过程。1)添加一个异步通信派生类CSocku,用于收发UDP网络协议数据,如图15-24所示。7)在CSocku类中添加一个虚函数OnReceive,用于接收UDP通信数据。表15-6 聊天对话框的控件属性16)创建与IDD_CHAT_DLG关联的CDialog派生类,并添加WM_INITDIALOG消息映射函数。

UDP的格式也是由命令号和附带数据两部分组成。但是UDP必须先使用结构体对命令号和数据进行打包后再发送,因为UDP不执行正确性检查。如果不打包则可能出现用户协议或协议数据不能完整到达,或者到达的顺序颠倒等问题。

创建工程名为“f”的对话框程序,用于演示UDP打包以及局域网P2P软件的开发过程。在应用程序向导的第2页,选中“Windows Sockets”复选框。如果没有选择该选项,那么也可以在stdafx.h中包含“afxsock.h”头文件,并在App类的InitInstance函数中调用AfxSocketInit函数。

1)添加一个异步通信派生类CSocku,用于收发UDP网络协议数据,如图15-24所示。

978-7-111-46378-8-Chapter15-67.jpg

图15-24 添加新类

2)在CFApp类的头文件中,添加一些数据定义和类成员变量

978-7-111-46378-8-Chapter15-68.jpg

978-7-111-46378-8-Chapter15-69.jpg

3)在主对话框中只使用一个列表控件(ID是IDC_LIST),用于显示在线的计算机,如图15-25所示。

978-7-111-46378-8-Chapter15-70.jpg

图15-25 编辑主对话框资源

4)通过类向导为列表控件建立控件型关联变量,如图15-26所示。

978-7-111-46378-8-Chapter15-71.jpg

图15-26 添加控件型关联变量

5)修改主对话框初始化函数的代码。

978-7-111-46378-8-Chapter15-72.jpg

978-7-111-46378-8-Chapter15-73.jpg

6)在CFApp类中添加一个公有成员函数InitInfo,用于初始化本机信息。

978-7-111-46378-8-Chapter15-74.jpg

7)在CSocku类中添加一个虚函数OnReceive,用于接收UDP通信数据。

978-7-111-46378-8-Chapter15-75.jpg

978-7-111-46378-8-Chapter15-76.jpg

8)在主对话框类中,添加一个公有成员函数InsertHost。

978-7-111-46378-8-Chapter15-77.jpg

9)编译并运行,测试代码,如图15-27所示。

在多台计算机上运行可执行程序,列表显示的是所有在线用户的信息。

978-7-111-46378-8-Chapter15-78.jpg

图15-27 查看运行结果

10)在CFApp类中添加虚函数ExitInstance,用于进程退出时群发离线消息。

978-7-111-46378-8-Chapter15-79.jpg(www.chuimin.cn)

11)在CSocku::OnReceive函数的switch语句中,添加一个case条件。

978-7-111-46378-8-Chapter15-80.jpg

12)在主对话框类中,添加一个公有成员函数RemoveHost。

978-7-111-46378-8-Chapter15-81.jpg

978-7-111-46378-8-Chapter15-82.jpg

13)编译并运行,测试代码。

在多台计算机上运行启动和关闭进程,查看用户上线和下线时列表是否显示正常。

14)在资源视图中插入一个对话框资源,用于向其他在线用户发送文字消息,如图15-28所示。

978-7-111-46378-8-Chapter15-83.jpg

图15-28 编辑聊天对话框资源

15)修改对话框ID为IDD_CHAT_DLG,修改外观和字体并插入一些控件,见表15-6。

表15-6 聊天对话框的控件属性

978-7-111-46378-8-Chapter15-84.jpg

16)创建与IDD_CHAT_DLG关联的CDialog派生类,并添加WM_INITDIALOG消息映射函数。

978-7-111-46378-8-Chapter15-85.jpg

17)在主对话框类中,添加“发送(&S)”按钮的消息映射函数OnOK。

978-7-111-46378-8-Chapter15-86.jpg

978-7-111-46378-8-Chapter15-87.jpg

18)在主对话框类中添加双击列表项(NM_DBLCLK)的消息反射函数。

978-7-111-46378-8-Chapter15-88.jpg

978-7-111-46378-8-Chapter15-89.jpg

19)在CSocku::OnReceive函数的switch语句中,添加一个case条件。

978-7-111-46378-8-Chapter15-90.jpg

20)在主对话框类中,添加一个公有成员函数OnText。

978-7-111-46378-8-Chapter15-91.jpg

21)编译并运行,测试代码。在多台计算机上相互发送聊天文字进行测试,如图15-29所示。

978-7-111-46378-8-Chapter15-92.jpg

图15-29 查看运行结果