栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

坚持学习100天:MFC我想kfc

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

坚持学习100天:MFC我想kfc

前言

Hello,我是修齊。
学习C++的第一百零三十天,用心学习。
在这里记录一些学习的东西和学习的心情,内容主要是一些自己学习整理的小笔记。

一、抓取IP数据包

1.协议栈是不会把网卡收到的数据全部复制到原始套接字上的,需要抓包分析网络数据包应该怎么办?
2.Winsock设置套接字控制台命令SIO_RCVALL(允许原始套接字能接收所有经过本机的网络数据包)。
3.设置方法:利用API函数WSAIoctl来发送I/O命令。
4.原始套接字抓取所有IP包,应注意:

·SIO_RCVALL系统中并没有暴露给我们使用,需自定义。
·SIO_RCVALL目前只能用于IPv4,因此在创建原始套接字的时候协议簇必须是AF_INET。
·使用sock函数创建原始套接字的时候,协议类型参数要为IPPROTO_IP:
	sockfd=socket(AF_INET,SOCK_RAW,
	IPPROTO_IP);
·必须将原始套接字绑定到本地的某个网络接口

5.ping命令几乎是Windows系统或Linux系统下最常用的网络命令。
6.探测网络上某个主机是否可达,只要在本机命令行下输入ping命令即可知道。
7.ping命令基本用法:后面直接加IP地址。如:ping192.168.1.1。
8.ping命令的本质是发送ICMP协议的网络数据包。

二、MFC套接字

1.MFC提供了两个封装Winsock API的类:CAsyncSocket,CSocket。
2.CSocket是CAsyncSocket的子类。
3.类CAsyncSocket使用异步套接字,类CSocket使用同步套接字。
4.CAsyncSocket类是从Object类派生,CAsyncSocket对象称为异步套接字对象。
5.使用CAsyncSocket之前,必须调用AfxSocketInit初始化WinSock环境。
6.AfxSocketInit会创建一个隐藏的CSocketWnd对象,是一个窗口对象,由CWnd派生,因此可以接收窗口消息。
7.类CAsyncSocket常见成员:

·Create函数:
·Attach函数:
·FromHandle函数:
·GetLastError函数:
·GetPeerName函数:
·GetSockName函数:
·Accept函数:
·Bind函数:
·Connect函数:
·Listen函数:
·Send函数:
·SendTo函数:
·Receive函数:
·ReceiveFrom函数:
·OnAccept函数:
·OnConnect函数:
·OnSend函数:
·OnReceive函数:
·AsyncSelect函数:
·Close函数:

8.CAsyncSocket类用DoCallBack函数处理MFC消息,当一个网络事件发生时,DoCallBack函数按网络事件类型:

FD_READ:套接字中有数据需要读取时触发事件。
FD_WRITE:通知可以写数据。
FD_ACCEPT:通知监听套接字有连接情求可以接受。
FD_CONNECT:通知情求连接的套接字,连接的要求已经被处理。

分别调用OnReceive,OnSend,OnAccept,OnConnect函数。
9.MFC把事件处理函数定义为虚函数,因此要生成一个新的C++类,以重载这些函数。

三、类CSocket

1.为了给程序员提供更方便的接口以自动处理网路任务。
2.类CSocket通常和类CSocketFile,CArchive一起进行数据收发,前者将CSocket 当作一个文件,后者完成在此文件上的读写操作。
3.CSocket基本成员:

.Create函数:
Attach函数
FromHandle
IsBlocking
CancelBlockingCall

4.基本用法:不直接使用CSocket,而派生出自己的套接字类,然后在派生类中对这些虚函数进行重载处理,加入应用程序对网络事件处理的特定代码。

上述内容如有侵权,联系即删。
感谢阅读-感谢支持

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925822.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号