3-24 1,223PVs
1.创建、关闭socket(…)、closesocket(…)
2.绑定接口bind(…)
3.连接处理connect(…)、listen(…)、accept(…)
4.发送数据send(…), sendto(…),sendmsg(…),write(…)
5.接收数据recv(…), recvfrom(…), recvmsg(…), read(…)
6.通信管理select(…)
7.辅助API
getsockname(…), getsockbyname(…)
getsockopt(…), setsockopt(…)
gethostname(…), sethostname(…)
8.字节顺序
htons(…), ntohs(…), htonl(…), ntohl(…)
9.IP地址处理
net_addr(…), inet_ntoa(…)
inet_netof(…), inet_lnaof(…)
12.创建socket
参数:pf:协议簇,符号PF_INET表示TCP/IP
type:协议类型,数据报(无连接)、流式(面向连接)
流式:SOCK_STREAM
数据报:SOCK_DGRAM
protocal:实际协议 IPPROTO_TCP IPPROTO_UDP
例:创建使用UDP的socket
SOCKET sk;
sk= socket(PFINET,SOCK_DGRAM,IPPROTO_UDP);
13.关闭创建的SOCKET
error_code=closesocket(sk);
14.绑定接口bind()
erc= bind(sk,localaddr,addrlen);
struct sockaddr_in{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
例:
SOCKET sk;
sockaddr_in myAddr;
sk= socket(PF_INET, SOCK_DGRAM,IPPROTO_UDP);
myAddr.sin_family = PF_INET;
myAddr.sin_port = 0;
myAddr.sin_addr = 0;
bind(sk, &myAddr, sizeof(sockaddr_in));
当本地可使用任意端口时,端口号置0即可
当对本地任意网络接口有效时,IP地址置0即可
15.请求建立连接Connect()
erc = connect(sk,dstAddr,addrlen)
若连接成功,erc为0,否则表示连接出错
16.发送数据sendto()
erc= sendto(sk,datalen,flag, dstAddr,addrlen)
函数用UDP报文把data送到指定IP的主机的指定端口上
data为发送数据缓冲区,datalen规定发送长度
flag指定特殊需求,一般为0
dstAddr为sockaddr_in结构指针,指定接收方的IP地址和 端口,addrlen为地址长度
17.发送数据send()
erc = send(sk,data,datalen,flag)
带调用使用TCP报文吧data送到指定IP的主机的指定端口上
使用的sk应该是实现已建立了TCP连接的
18.接受数据recvfrom()
Byte_recvd=recvfrom(sk,buff,length,flag,srcAddr,addrLen)
该调用从socket接收从网上收到的UDP报文
收到的数据放在buff中,对方的地址放在srcAddr中buff和length指明接收缓冲区的位置和大小
如果缓冲区小于UDP报文长度,剩余的数据将消失
srcAddr 将由UDP协议填入发送方的IP地址和端口
返回值指出实际接收的字节数
该函数会一直阻塞软件运行,直到收到报文后,才恢复运行
19.接受数据recv()
Byte_Recvd=recv(sk,buff,length,flag)
该调用从TCP的连接的数据流中接收数据
buff指出存放数据的缓冲区,length指定了希望接收的数据长度
如果数据流中的数据长度大于length的长度,TCP只往缓冲区中送length个字节,后续数据不会丢
失,下次调用接收函数时,就会收到,
流中的数据长度小于length时,返回值指出实际接收的字节数
该函数会一直阻塞软件运行,直到收到报文后,才恢复运行
20.查询socket
n = select(ssks,rsks,esks,tmo)
n:返回可用socket数目
ssks:【IN】要查询的一组发送socket
【OUT】可发送的sockets
rsks:【IN】要查询的一组接收sockets
【OUT】有数据达到的sockets
esks:【IN】要查询的一组sockets
【OUT】出错的sockets
tmo:定时值,非0为等待时间;0 表示永远等待,直到至少有一个sockets有情况出现