首页 理论教育MFC视频教程:简单TCP通信,CSocket类实现数据传输

MFC视频教程:简单TCP通信,CSocket类实现数据传输

【摘要】:TCP的通信过程比UDP复杂得多,必须依据C/S架构基础进行开发,一般TCP通信软件都分为服务器端和客户端两部分。图15-12 TCP服务器的侦听和应答结构创建工程名为“Server”和“Client”的两个对话框程序,用于演示通过CSocket类实现简单的TCP数据通信。图15-14 程序向导自动添加的代码3)在Server工程中创建一个CSocket类的派生类CListenSocket,如图15-15所示。6)在CListenSocket类中添加虚函数OnAccept,用于截获客户端的连接。8)在CClientSocket类中添加虚函数OnClose,用于监测某个客户端是否断开了连接。

TCP的通信过程比UDP复杂得多,必须依据C/S架构基础进行开发,一般TCP通信软件都分为服务器端和客户端两部分。.TCP服务器端由一个侦听Socket和多个用于应答的Socket组成,每个应答Socket与客户端建立一对一的数据流通道。客户端程序只包含一个连接Socket,它在成功连接服务器后与某一个应答Socket进行一对一的数据通信

服务器的侦听Socket就如同公司的前台接待员,不参与客户的订单买卖。当有上门联系的客户时引荐给客户经理,每一个应答Socket就代表一个客户经理。具体的数据交互过程,必须由应答Socket与客户端之间一对一地进行,如图15-12所示。

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

图15-12 TCP服务器的侦听和应答结构

创建工程名为“Server”和“Client”的两个对话框程序,用于演示通过CSocket类实现简单的TCP数据通信。在创建应用程序向导的第2页,选中“Windows Sockets”复选框。该选项在创建工程时自动向stdafx.h预编译头文件中增加afxsock.h头文件,并在App类的InitInstance进程启动函数中调用AfxSocketInit函数,如图15-13所示。

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

图15-13 MFC应用程序向导

1)创建工程完毕后查看stdafx.h预编译头文件,如图15-14所示。

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

2)再查看InitInstance函数。

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

图15-14 程序向导自动添加的代码

3)在Server工程中创建一个CSocket类的派生类CListenSocket,如图15-15所示。

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

图15-15 添加新类

4)用同样的方法再创建一个CScoket类的派生类CClientSocket,如图15-16所示。

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

图15-16 创建后的CSocket派生类

5)在CServerApp类的头文件中,添加一个指针链表类型的成员变量

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

6)在CListenSocket类中添加虚函数OnAccept,用于截获客户端的连接。

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

7)在CClientSocket类中添加虚函数OnReceive,用于截获客户端发来的网络数据。

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

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

8)在CClientSocket类中添加虚函数OnClose,用于监测某个客户端是否断开了连接。

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

9)在主对话框类中,添加CListenSocket类型的成员变量。

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

10)修改主对话框初始化函数代码,创建Socket并开始侦听。

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

11)在Client工程的主对话框中增加一些控件,如图15-17所示。

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

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

12)修改控件属性,见表15-4。

表15-4 主对话框的控件属性

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

13)创建一个CSocket的派生类CConnectSocket,如图15-18所示。

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

图15-18 创建后的CSocket派生类

14)在CConnectSocket类中添加虚函数OnReceive,用于截获服务器发来的网络数据。

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

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

15)在主对话框类的头文件中,添加一个CConnectSocket类型的成员变量。

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

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

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

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

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

18)编译并运行,测试服务器和客户端代码,如图15-19所示。

首先开启服务器程序,再在一台或多台计算机开启多个客户端程序进行测试,很明显这是一个简易的聊天室软件框架

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

图15-19 查看运行结果