前言
Hello,我是修齊。
学习C++的第一百零二十八天,用心学习。
在这里记录一些学习的东西和学习的心情,内容主要是一些自己学习整理的小笔记。
一、I/O控制命令
1.套接字的I/O控制主要用于设置套接字的工作模式(阻塞模式还是非阻塞模式)。
2.Winsock提供函数ioctlsocket和WSAIOctl来发送I/O控制命令。
3.ioctlsocket声明:
int ioctlsocket(SOCKET s,long cmd,u_long*
argp);
4.s为要设置I/O模式的套接字的描述符,cmd表示发给套接字的I/O控制命令。
5.cmd通常取值:
.FIONBIO:设置或清除阻塞模式的命令。当argp作为输入参数为0,套接字设置为阻塞模式;当argp作为输入参数为非0,套接字设置为非阻塞模式。
(函数WSAAsynSelect会将套接字自动设置为非阻塞模式,若对某个套接字调用了WSAAsynSelect函数,再想用ioctlsocket函数把套接字重新设置为阻塞模式,ioctlsocket会返回WSAEINVAL错误,应该重新调用WSAAsynSelect函数,并把其参数IEvent设置为0.)
.FIONREAD:确定套接字s自动读入数据量的命令,若s是流套接字(SOCET_STREAM)类型,则argp得到函数recv调用一次时可读入的数据量,通常和套接字中排队的数据总量相同。若s是数报套接字(SOCK_DGRAM),则argp返回套接字排队的第一个数据报的大小。
.FIOASYNC:设置或清除异步I/O的命令。
6.WSAIoctl是Winsock2中的I/O控制命令函数,声明:
int WSAIoctl(SOCKET s,DWORD dwIoControlCode,LPVOID
lpvInBuffer,
DWORD cbInBuffer,LPVOID lpvOutBuffer,DWORD cbOutBuffer,
LPDWORD lpcbBytesReturned,LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
7.·s:[in]套接字描述符(句柄)。
8.·dwIoControlCode:[in]存放用于操作的控制码,如:SIO_RCVALL(接收全部数据包的选项)。
9.·IpvBuffer:[in]指向输入缓冲区地址。
10.··cbInBuffer:[in]输入缓冲区的字节大小。
11.·IpvOutBuffer:[out]指向输出缓冲区的地址。
12.·cbOutBuffer:[in]输出缓冲区的字节大小。
13.·IpvbBytesReturned:[out]指向存放实际输出数据的字节大小的变量地址。
14.·IpOverlapped:[in]指向WSAOVERLAPPED结构体的地址。
15.·IpCompletionRoutine:[in]指向一个例程函数,函数在操作结束后调用。
二、套接字选项
1.除了发送I/O控制命令影响套接字的行为外,还可设置套接字的选项来对套接字控制。
2.套接字属性:(获取或设置属性)设置套接字的接收和发送缓冲区大小、指定是否允许套接字绑定到一个已经使用的地址、判断套接字是否支持广播、控制带外数据的处理、获取和设置超时参数。
3.选项有针对特定协议的、有适用所有类型的套接字,因此有选项级别(level)概念。
4.常见级别:
·SOL_SOCKET:级别与套接字使用的具体协议无关,只作用于套接字本身。
`SOL_LRLMP:级别的选项作用于IrDA协议。
`IPPROTO_IP:级别的选项作用于IPv4协议。
·IPPROTO_IP6:级别作用于IPv6协议,有一些选项和IPPROTO_IP对应。
·IPPROTO_RM :级别选项作用于可靠的多播传输。
·IPPROTO_TCP:级别选项适用于流式套接字。
·IPPROTO_UDP:级别选项适用于数据报套接字。
5.Winsock提供API函数getsockopt来获取套接字的选项,声明:
int getsockopt(SOCKET s,int level,int optname,char*optval,
int*
optlen);
6.参数s是套接字描述符。
7.level表示选项的级别。如取值:SOL_SOCKET,IPPROTO_IP,IPPROTO_TCP,IPPROTO_UDP
8.optname表示获取的选项名称。
9.optval[out]指向存放接收到的选项内容的缓冲区。
10.char*表示传入的是optval的地址。
11.optval[in,out]指向optval所指缓冲区的大小。
12.Winsock提供API函数setsockopt来获取套接字的选项,声明:
int setsockopt(SOCKET s,int level,int optname,const char*optval,
int
optlen);
三、UDP套接字编程
1.UDP套接字就是数据报套接字,一种无连接的Socket。
2.UDP套接字程序中,客户不与服务器建立连接,直接使用sendto函数给服务器发送数据报即可。同样,服务器不接受来自客户的连接,只管调用recvfrom函数,等待来自某个客户的数据到达。
3.UDP套接字编程相关函数:套接字创建socket()、地址绑定bind(),消息传输函数sendto()和recvfrom()。
4.就这样吧。今天2022年5月20日,祝大家快乐!!!
上述内容如有侵权,联系即删。
感谢阅读-感谢支持