socket编程
1. 函数说明
socket编程有以下几种基本函数:
- socket():用于创建套接字,同时指定协议和类型
- bind():将保存在相应地址结构中的地址信息与套接字进行绑定。主要用于服务器端,客户端创建的套接字可以不绑定地址
- listen():在服务器端建立套接字并绑定地址后,将套接字设置成监听模式(被动模式),准备接收客户端的连接请求
- accept():等待并接收客户端的连接请求。建立好TCP连接后,该函数将返回一个新的已连接套接字
- connect():客户端通过该函数向服务器端的监听套接字发送连接请求
- send()和recv():通常用于TCP通讯中的发送和接收数据,也可用在UDP中
- sendto()和recvfrom():通常用于UDP通讯中的发送和接收数据
2. 函数原型
socket()函数
/*****socket()*****/
函数原型:int socket(int family, int type, int protocol)
传 入 值:family 协议族
-->AF_INET:IPv4协议
-->AF_INET6:IPv6协议
-->AF_LOCAL:UNIX域协议
-->AF_ROUTE:路由套接字
-->AF_KEY:密钥套接字
type 套接字类型
-->SOCK_STREAM 流式套接字
-->SOCK_DGRAM 数据报套接字
-->SOCK_RAW 原始套接字
protocol 0(原始套接字除外)
返 回 值:成功返回非负套接字描述符;失败返回-1
bind()函数
/*****bind()*****/
函数原型:int bind(int sockfd, struct sockaddr *my_addr, int addrlen)
传 入 值:sockfd 套接字描述符
my_addr 绑定的地址
addrlen 地址长度
返 回 值:成功返回0;失败返回-1
listen()函数
/*****listen()*****/
函数原型:int listen(int sockfd, int backlog)
传 入 值:sockfd 套接字描述符
backlog 请求队列中允许的最大请求数,大多数系统默认值为5
返 回 值:成功返回0;失败返回-1
accept()函数
/*****accept()*****/
函数原型:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
传 入 值:sockfd 套接字描述符
addr 用于保存客户端地址
addrlen 地址长度
返 回 值:成功返回建立好连接的套接字描述符;失败返回-1
connect()函数
/*****connect()*****/
函数原型:int connect(int sockfd, struct sockaddr *serv_addr, int addrlen)
传 入 值:sockfd 套接字描述符
serv_addr 服务器端地址
addrlen 地址长度
返 回 值:成功返回0;失败返回-1
send()和recv()函数
/*****send()*****/
函数原型:int send(int sockfd, const void *buf, int len, int flags)
传 入 值:sockfd 套接字描述符
buf 发送缓冲区的地址
len 发送数据的长度
flags 一般为0
返 回 值:成功返回实际发送的字节数;失败返回-1
/*****recv()*****/
函数原型:int recv(int sockfd, const void *buf, int len, unsigned int flags)
传 入 值:sockfd 套接字描述符
buf 存放接收数据的缓冲区
len 接收数据的长度
flags 一般为0
返 回 值:成功返回实际接收到的字节数;失败返回-1
sendto()和recvfrom()函数
/*****sendto()*****/
函数原型:int sendto(int sockfd, const void *buf, int len, unsigned int flags, const struct sockaddr *to, int tolen)
传 入 值:sockfd 套接字描述符
buf 发送缓冲区的地址
len 发送数据的长度
flags 一般为0
to 接收方套接字的IP地址和端口号
tolen 地址长度
返 回 值:成功返回实际发送的字节数;失败返回-1
/*****recvfrom()*****/
函数原型:int recvfrom(int sockfd, const void *buf, int len, unsigned int flags, const struct sockaddr *from, int fromlen)
传 入 值:sockfd 套接字描述符
buf 存放接收数据的缓冲区
len 接收数据的长度
flags 一般为0
from 发送方的IP地址和端口号信息
fromlen 地址长度
返 回 值:成功返回实际接收到的字节数;失败返回-1