从程序的角度来看,套接字的概念与文件句柄的概念相似,它是一个句柄代表网络协议中的一组数据.这组数据包括TCP连接中双方的IP地址和连接状态等.
流套接字提供双向有序,无重复并且没有记录边界的数据流服务.
数据报套接字岁让支持双向的数据流,但不保证数据是可靠的,有序的和无重复的.
SOCKET s=socket();
if(INVALID_SOCKET==S)
{//失败.}
协议特征
面向连接(可靠性,准确性)与面向无连接(数据报,效率高). 可靠性与次序性. 面向消息(对每个离散命令来说,如果传输协议把每条命令作为独立的消息进行传输).
部分消息(只用于面向消息的协议). 从容关闭(一方即使关闭连接,但对方仍然可以读取网络堆栈中的数据). 路由选择. 广播数据.
阻塞模式:套接字在执行操作事,调用函数在没有完成操作之前不会立即返回到工作模式.一般是用于少量数据接受和发送的简单网络程序.
Windows Sockets 分别提供了 套接字模式 和 套接字I/O模型.
套接字模式有阻塞和非阻塞 两种工作模式. 套接字I/O模型描述了一个应用程序如果对套接字上的I/O进行管理.
使用socket()和WSASocket()创建套接字时,默认的是阻塞. 但并不是所有以阻塞套接字为参数调用都会发生阻塞.例如 bind().listen()...
inet_ntoa()和inet_add()实现网络地址和 . 间隔的字符串地址之间的转换.
ntohs();
套接字在非阻塞模式中,调用的函数不管操作是否完成都会立即返回.
ioctlsocket()可将套接字设置为非阻塞模式.
Select模型是Windows Sockets中最常见的I/O模型. 核心函数 Select(). 判断当前各个套接字的当前状态.根据该函数的返回值,判断套接字的可读可写性. 需要用到的FD_SET.FD_ZERO.FD_ISSET和FD_CLR4这些宏.
WSAAsyncSelect 模型是Windows Sockets的一个异步I/O模型. 非阻塞模式. 利用该模型可以在一个套接字上,接受Windows消息为基础的网络事件. Windows Sockets应用程序在创建套接字后,调用WSAAsyncSlect()函数注册感兴趣的网络事件.