1. recvfrom函数
1.1函数原型:
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
1.1函数功能:
读取指定的套接字sockfd中的内容,并将其存储到buf指定的缓冲区中。
1.2 函数参数:
1.2.1 sockfd
需要接受数据的套接字的文件描述符。
1.2.2 buf
指定接受的数据 存储的位置(缓冲区)。
1.2.3 len
指定接受的数据 存储的缓冲区的长度。一般写为sizeof(buf)。
1.2.14 flags
一般指定为0。
1.2.5 src_addr
需要将接收数据的套接字的地址格式 指定为通用套接字地址。
1.2.6 addrlen
将 传递过来的通用套接字结构体变量的长度 存储的位置。 一般需要事先定义一个变量,然后调用这个函数时,将这个变量的地址作为函数的该参数。
1.3 函数返回值:
- 接收数据成功:则返回实际接收到的字符数。
- 接收数据失败:返回-1,错误原因会存于errno 中。
2. socket函数
2.1 函数原型
#include <sys/socket.h> int socket(int domain, int type, int protocol);
2.2 函数功能
创建套接字。
2.3函数参数
2.3.1 domain
指定通信特性,通常以AF_开头(Adress Family)。常用的可选参数
- AF_INET: 代表通信的地址格式为IPv4
- AF_LOCAL:系统内部通信
2.3.2 type
确定套接字的类型,进一步确定通信特性。常用的可选参数:
- SOCK_DGRAM: 固定长度的、无连接的、不可靠的通信(默认的实现协议:UDP)
- SOCK_STREAM:有序、可靠、双向、面向链接的通信。(默认的实现协议:TCP)
2.3.3 protocol:
通常指定为0,即为给定的domain、套接字类型选择默认的协议。
2.4 函数返回值
- 成功: 返回套接字文件描述符
- 失败: 失败返回-1
3. sockaddr_in 结构体
使用场景:
- 绑定套接字时使用。
struct sockaddr_in {
short int sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
}
struct in_addr {
unsigned long s_addr;
}
4. bind函数
4.1 函数原型
#include <sys/socket.h>
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
4.1 函数功能
将 套接字 与指定的 套接字地址 绑定起来。
4.2 函数参数
4.2.1 socket
需要绑定的套接字描述符。
4.2.2 address
需要绑定的 服务器端的 套接字的地址,需要强转成 通用套接字地址格式。
4.2.3 address_len
需要绑定的 服务器端的 套接字的地址 的长度。 一般指定为sizeof(服务器地址)。
4.3 函数返回值
- 绑定成功: 返回0
- 绑定失败:返回-1
5. inet_addr 函数
5.1函数原型
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
in_addr_t inet_addr(const char *cp);
5.2 函数功能
将字符串 ip 地址 装换为二进制形式。
5.3 函数参数
- cp:字符串,一般指定需要访问的ip 的字符串
5.4 函数返回值
返回字符串ip地址的 二进制形式。
6.inet_pton函数
6.1 函数原型
#include<arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
6.2 函数功能
将af 指定的通信格式的 字符串地址src 转换成 二进制格式并存储到dst 指定的区域内。
6.3 函数参数
6.3.1 af
指定地址的通信特性。例如:AF_INET 即IPv4 格式。
6.3.1 src
指定需要转换的字符串,一般传递字面量即可。
6.3.3 dst
指定转换后存储的位置。
6.4 函数返回值
- 转换成功:返回1
- src不合法:返回0
- af不合法:返回-1