linux开发1-网络编程一之socket
目录
WindowsSocket
STRUCT
struct sockaddr_in
sin_family
sin_port
sin_addr.s_addr
FNCTION
htons
htonl
inet_addr
// 点分十进制IP -> 大端整形
in_addr_t inet_addr (const char *cp);
inet_ntoa
// 大端整形 -> 点分十进制IP
char* inet_ntoa(struct in_addr in);
inet_pton
// 主机字节序的IP地址转换为网络字节序
// 主机字节序的IP地址是字符串, 网络字节序IP地址是整形
int inet_pton(int af, const char *src, void *dst);
- af: 地址族 (IP 地址的家族包括 ipv4 和 ipv6) 协议
- AF_INET: ipv4 格式的 ip 地址
- AF_INET6: ipv6 格式的 ip 地址
- src: 传入参数,对应要转换的点分十进制的 ip 地址: 192.168.1.100
- dst: 传出参数,函数调用完成,转换得到的大端整形 IP 被写入到这块内存中
返回值:成功返回 1,失败返回 0 或者 - 1
inet_ntop
#include <arpa/inet.h>
// 将大端的整形数, 转换为小端的点分十进制的IP地址
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
- af: 地址族协议
- AF_INET: ipv4 格式的 ip 地址
- AF_INET6: ipv6 格式的 ip 地址
- src: 传入参数,这个指针指向的内存中存储了大端的整形 IP 地址
- dst: 传出参数,存储转换得到的小端的点分十进制的 IP 地址
- size: 修饰 dst 参数的,标记 dst 指向的内存中最多可以存储多少个字节
返回值:
成功:指针指向第三个参数对应的内存地址,通过返回值也可以直接取出转换得到的 IP 字符串
失败: NULL
socket
创建网络套接字。
int socket(int domain,int type,int protocol);
参数:
- domain: 使用的地址族协议
- AF_INET: 使用 IPv4 格式的 ip 地址
- AF_INET6: 使用 IPv4 格式的 ip 地址
- type:
- SOCK_STREAM: 使用流式的传输协议
- SOCK_DGRAM: 使用报式 (报文) 的传输协议
- protocol: 一般写 0 即可,使用默认的协议
- SOCK_STREAM: 流式传输默认使用的是 tcp
- SOCK_DGRAM: 报式传输默认使用的 udp
返回值:
成功:可用于套接字通信的文件描述符
失败: -1
setsockopt
bind
int bind(int sockfd,const struct sockaddr *addr,socklent_t addrlen);
给socket绑定一个地址结构。
返回值:成功返回0,失败返回-1。
listen
int listen(int sockfd,int backlog);
sockfd:socket创建的返回值描述符。
backlog:设置监听上限数值,最大值128。
accept
阻塞待待客户端建立连接,成功连接后返回一个与客户端成功连接的socket文件描述符。
int accept(int sockfd,struct sockaddr *addr,socklent_t *addrlen); //返回值是与客户端成功的文件描述符,失败返回-1。
sockfd:socket创建的文件描述符。
-
addr:输出参数,成功与服务器建立连接的客户端的地址结构。
-
addrlen:输出sockaddr的大小。客户端addr实际大小。
connect
与服务端建立连接。成功返回0,失败返回-1。如果不使用bind绑定客户端地址结构,会采用隐式绑定方式。
int connect(int sockfd,const struct sockaddr *addr,socklent_t addrlen);
- sockfd:socket文件描述符。
- addr:传入要连接到的服务端地址结构。
- addrlen:连接到服务端的地址结构大小。
read
读取数据
write
写发送数据
recvfrom
UDP使用接收数据
// 接收数据, 如果没有数据,该函数阻塞
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
- sockfd: 基于 udp 的通信的文件描述符
- buf: 指针指向的地址用来存储接收的数据
- len: buf 指针指向的内存的容量,最多能存储多少字节
- flags: 设置套接字属性,一般使用默认属性,指定为 0 即可
- src_addr: 发送数据的一端的地址信息,IP 和端口都存储在这里边,是大端存储的
如果这个参数中的信息对当前业务处理没有用处,可以指定为 NULL, 不保存这些信息 - addrlen: 类似于 accept () 函数的最后一个参数,是一个传入传出参数
传入的是 src_addr 参数指向的内存的大小,传出的也是这块内存的大小
如果 src_addr 参数指定为 NULL, 这个参数也指定为 NULL 即可
返回值:成功返回接收的字节数,失败返回 - 1
close
close(fd) //关闭套接字
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具