Socket套接字函数

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

1.WSAStartup
WSAStartup函数用于初始化wa2_32.dll动态链接库。

wVersionRequested:调用者使用的Windows Socket的版本
lpWSAData:一个WSADATA结构指针

wVersion:调用者使用的ws_32.dll动态链接库的版本号
wHighVersion:ws_32.dll支持的最高版本,通常与wVersion相同
szDescription:套接字描述信息,无实际意义
szSystemStatus:系统的配置或状态信息,无实际意义
iMaxSockets:最多可以打开多少个套接字,在套接字版本2或以后版本中,该成员将被忽略
iMaxUdpDg:数据报的最大长度。在套接字版本2或以后版本中,该成员将被忽略
lpVendorInfo:套接字厂商信息。在套接字版本2或以后版本中,该成员将被忽略

2.socket
该函数用于创建一个套接字

af:一个地址族,通常为AF_INET
type:套接字类型,如果为SOCK_STREAM,表示创建面向链接的流式套接字;为SOCK_DGRAM,表示创建面向无链接的数据报套接字;为SOCK_RAW,表示创建原始套接字。
potocol:表示套接口所用的协议,如果用户不指定,可以设置为0
返回值:返回创建的套接字句柄

3.bind
该函数用于将套接字绑定到指定的端口和地址上

s:套接字标识
name:一个sockaddr结构指针,该结构包含了要结合的地址和端口号
namelen:确定name缓冲区的长度
返回值:成功为0,否者为SOCKET_ERROR

4.listen
该函数用于将套接字设置为监听模式

s:套接字标识
backlog:等待连接的最大队列长度。例如,如果backlog=2,此时有三个客户端同时发出连接请求,那么前两个客户端会放置在等待队列中,第三个 客户端会得到错误信息
对于流式套接字,必须处于监听模式才能接受客户端套接字的连接。

5.accept
该函数用于接受客户端的连接,对于流式套接字,必须处于监听状态,才能接受客户端的连接

s:一个套接字,应处于监听状态
addr:一个sockaddr_in结构指针,包含一组客户端的端口号、IP地址等信息
addrlen:用于接受参数addr的长度
返回值:一个新的套接字,它对应于已经接受的客户端连接,对于该客户端的所有后续操作,都应使用这个新的套接字

6.closesocket
该函数用于关闭套接字

其中,S用于标识一个套接字。如果参数s设置SO_DONTLINGER 选项,则调用该函数后会立即返回,但此时如果有数据尚未传送完毕,会继续传送数据,然后关闭套接字。

7.connect
该函数用于发送一个连接请求

s:一个套接字
name:套接字s想要连接的主机地址和端口号
namelen:name缓冲区的长度
返回值:如果函数执行成功,返回值为0;否则为SOCKET_ERROR,用户可以通过WSAGETLASTERROR得到其错误描述

8.htons
该函数将一个16位的无符号短整型数据由主机排列方式转换为网络排列方式

返回值:16位的网络排列方式数据

9.htonl
该函数将一个32位的无符号短整型数据由主机排列方式转换为网络排列方式

返回值:32位的网络排列方式数据

10.inet_addr
该函数将一个由字符串表示的地址转换为32位的无符号长整型数据

cp:一个IP地址的字符串
返回值:32位无符号长整型

11.recv?
该函数用于从面向连接的套接字中接受数据

s:一个套接字
buf:接受数据的缓冲区
len:buf的长度
flags:函数的调用方式,如果为MSG_PEEK,表示查看传来的数据,数据被复制到接受缓冲区,但是不会从输入队列中移走;为MSG_OOB,表示来处理Out-Of-Band数据,也就是带外数据

12.send
该函数用于在面向连接方式的套接字间发送数据

s:一个套接字
buf:存放要发送数据的缓冲区
len:缓存区长度
flag:函数的调用方式

13.select
该函数用来检查一个或多个套接字是否处于可读可写或错误状态

nfds:无实际意义
readfds:一组被检查的可读的套接字
writefds:一组被检查可写的套接字
exceptfds:被检查有错误的套接字
timeout:函数的等待时间

14.WSACleanup
该函数用于释放为ws2_32.dll动态链接库初始化时分配的资源

 

15.WSAAsyncSelect
该函数用于将网络中发生的事件关联到窗口的某个消息中

s:套接字
hWnd:接受消息的窗口句柄
wMsg:窗口接受来自套接字中的消息
IEvent:网路中发生的事件

16.ioctlsocket
该函数用于设置套接字的I/O模式

s:待更改I/O模式的套接字
cmd:对套接字的操作命令。cmd=FIOBIO,当argp为0时表示禁止非阻塞模式,当argp为非零时表示设置非阻塞模式。cmd=FIONREAD,表示从套接字中可以读取的数据量;cmd=SIOCATMARK,表示是否所有的带外数据都已被读入,这个命令仅适用于流式套接字,并且该套接字已被设置为可以在线接受带外数据(SO_OOBINLINE)
argp:命令参数