常用网络编程函数

1. 主机与网络字节序转换函数

头文件:<netinet/in.h>

    1.1 主机转网络
htons(uint16_t) // 16位
htonl(uint32_t)	// 32位
    1.2 网络转主机
ntohs(uint16_t) // 16位
ntohl(uint32_t) // 32位

2. 地址转换函数

头文件:<arpa/inet.h>

    2.1 字符串转数值
inet_aton(const char*, struct in_addr*) // 字符串有效返回1,否则0
(已废弃)inet_addr(const char*) // 成功返回转换的数值,失败返回INADDR_NONE

// 可用于IPv6的新函数
inet_pton(int, const char*, void*) //(地址族参数, 要转换的字符串, 接收转换的数值)
    2.2 数值转字符串
inet_ntoa(struct in_addr) //返回IP地址字符串

// 可用于IPv6的新函数
inet_ntop(int, const void*,  char*, size_t) // (地址簇, 数值, IP字符串, sizeof(字符串)) 返回值也是指向该字符串的地址

3. 多种IO函数

    1. send/recv

头文件:<sys/socket.h>

//  (套接字, 要传输数据的缓冲地址, 传输的字节数, 指定可选项)
send(int, const void*, size_t, int) // 成功返回发送的字节数,失败-1

//  同上
recv(int, void*, size_t, int) // 返回值同上, 收到EOF返回0
可选项含义
MSG_OOB用于传输带外数据
MSG_PEEK验证输入缓冲中是否存在接受的数据
MSG_DONTROUTE数据传输过程中不参照路由表,在本地网络中寻找目的地
MSG_DONTWAIT调用I/O函数时不阻塞,用于使用非阻塞I/O
MSG_WAITALL防止函数返回,直到接收全部请求的字节数
    2. readv/writev (多个缓冲统一收发)

头文件:<sys/uio.h>

//    (套接字, iovec结构体, 2数组长度)   文件或标准描述符也可用
writev(int, const struct iovec*, int) // 成功返回发送的字节数,失败-1

//    同上
readv(int, const struct iovec*, int)  // 返回值同上

struct iovec
{
	void* iov_base;	// 缓冲地址
	size_t iov_len;	// 缓冲大小
}

4. 套接字半关闭函数

头文件:<sys/socket.h>

shutdown(int sock, int howto) //成功返回0,失败-1
howto可选参数:
------------: SHUT_RD   // 断开输入流
------------: SHUT_WR   // 断开输出流
------------: SHUT_RDWR // 同时断开IO流

5. FILE和文件描述符的相互转换

头文件:<stdio.h>

//    (文件描述符, FILE模式(与fopen的打开模式相同))
fdopen(int fildes, const char* mode)  // 转换为FILE, 成功返回FILE,失败NULL

fileno(FILE*) // 成功返回转换后的文件描述符,失败-1

6. 套接字可选项设置函数

头文件:<sys/socket.h>

//        (套接字, 协议层, 选项名, 结果缓存地址, 4参数字节大小) 获取套接字可选项
getsockopt(int sock, int level, int opt, void*, socklen_t*) // 成功返回0,失败-1

// 参数,返回值同上, 设置套接字可选项
setsockopt(int, int, int, const void*, socklen_t)

7. IP地址与域名转换函数

头文件:<netdb.h>

gethostbyname(const char*) // 域名转IP 返回为hostent结构体,失败为NULL
gethostbyaddr(const char*, socklen_t, int) (IP地址,1大小, 地址簇) 返回值同上

可选性表可参考:可选项汇总表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值