网络编程核心函数

目录

一、网络字节序转换函数

二、服务器端函数

三、客户端函数

四、通用文件操作函数

五、UDP 相关函数

六、文件属性调整函数

七、IO 多路复用相关函数


一、网络字节序转换函数

  1. uint32_t htonl(uint32_t hostlong)
    • 参数:hostlong是一个 32 位的主机字节序整数。
    • 功能:将 32 位整数从主机字节序转换为网络字节序。
    • 返回值:转换后的网络字节序的 32 位整数。
  2. uint16_t htons(uint16_t hostshort)
    • 参数:hostshort是一个 16 位的主机字节序整数。
    • 功能:将 16 位整数从主机字节序转换为网络字节序。
    • 返回值:转换后的网络字节序的 16 位整数。
  3. uint32_t ntohl(uint32_t netlong)
    • 参数:netlong是一个 32 位的网络字节序整数。
    • 功能:将 32 位整数从网络字节序转换为主机字节序。
    • 返回值:转换后的主机字节序的 32 位整数。
  4. uint16_t ntohs(uint16_t netshort)
    • 参数:netshort是一个 16 位的网络字节序整数。
    • 功能:将 16 位整数从网络字节序转换为主机字节序。
    • 返回值:转换后的主机字节序的 16 位整数。
  5. in_addr_t inet_addr(const char *cp)
    • 参数:cp是一个指向表示 IP 地址的字符串的指针。
    • 功能:将点分十进制的 IP 地址字符串转换为网络字节序的 IP 地址整数。
    • 返回值:转换后的网络字节序的 IP 地址整数。
  6. char *inet_ntoa(struct in_addr in)
    • 参数:in是一个in_addr结构体,包含网络字节序的 IP 地址。
    • 功能:将网络字节序的 IP 地址转换为点分十进制的 IP 地址字符串。
    • 返回值:指向转换后的 IP 地址字符串的指针。

二、服务器端函数

  1. int socket(int domain, int type, int protocol)
    • 参数:
      • domain表示地址族,常见的值有PF_INET(互联网程序)和PF_UNIX(单机程序)。
      • type表示套接字类型,如SOCK_STREAM(流式套接字,对应 TCP)、SOCK_DGRAM(用户数据报套接字,对应 UDP)、SOCK_RAW(原始套接字)。
      • protocol表示协议,通常为 0 表示自动适应应用层协议。
    • 功能:向内核提出创建一个基于内存的套接字描述符。
    • 返回值:成功返回申请的套接字 id,失败返回 -1。
  2. int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen)
    • 参数:
      • sockfd是之前通过socket函数创建的文件描述符,即套接字 id。
      • my_addr是物理接口的结构体指针,表示该接口的信息,可以是通用地址结构struct sockaddr或网络地址结构struct _sockaddr_in
      • addrlen是参数my_addr的长度。
    • 功能:如果在服务器端调用,表示将sockfd相关的文件描述符与指定的接口地址关联,用于从该接口接受数据;如果在客户端调用,表示要将数据从sockfd所在的描述符中取出并从指定的接口设备上发送出去。
    • 返回值:成功返回 0,失败返回 -1。
  3. int listen(int sockfd, int backlog)
    • 参数:
      • sockfd是套接字 id。
      • backlog表示允许链接的个数。
    • 功能:在sockfd所在的套接字上监听等待链接。
    • 返回值:成功返回 0,失败返回 -1。
  4. int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
    • 参数:
      • sockfd是套接字 id。
      • addr如果为NULL,表示不论客户端是谁都接入;如果要获取客户端信息,则事先定义变量并传入变量地址,函数执行完毕将会将客户端信息存储到该变量中。
      • addrlen如果参数addrNULL,则该值也为NULL;如果参数addr不是NULL,则应该写成len = sizeof(struct sockaddr)
    • 功能:从已经监听到的队列中取出有效的客户端链接并接入到当前程序。
    • 返回值:成功返回一个用于通信的新套接字 id;从该代码之后所有通信都基于该 id,失败返回 -1。
  5. ssize_t recv(int sockfd, void *buf, size_t len, int flags)
    • 参数:
      • sockfd如果是服务器则是accept的返回值的新 fd,如果是客户端则是socket的返回值旧 fd。
      • buf是用来存储数据的本地内存,一般是数组或者动态内存。
      • len是要获取的数据长度。
      • flags是获取数据的方式,0 表示阻塞接受。
    • 功能:从指定的sockfd套接字中以flags方式获取长度为len字节的数据到指定的buf内存中。
    • 返回值:成功表示接受的数据长度,一般小于等于len,失败返回 -1。
  6. close()
    • 功能:关闭指定的套接字 id。

三、客户端函数

  1. int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
    • 参数:
      • sockfd是本地socket创建的套接子 id。
      • addr是远程目标主机的地址信息。
      • addrlen是参数addr的长度。
    • 功能:该函数固定由客户端使用,表示从当前主机向目标主机发起链接请求。
    • 返回值:成功返回 0,失败返回 -1。
  2. int send(int sockfd, const void *msg, size_t len, int flags)
    • 参数:
      • sockfd如果是服务器则是accept的返回值新 fd,如果是客户端则是sockfd的返回值旧 fd。
      • msg是要发送的消息。
      • len是要发送的消息长度。
      • flags是消息的发送方式。
    • 功能:从msg所在的内存中获取长度为len的数据以flags方式写入到sockfd对应的套接字中。
    • 返回值:成功返回发送的字符长度,失败返回 -1。

四、通用文件操作函数

  1. read()/write()
    • read()参数:
      • int fd:文件描述符。
      • void *buf:存储读取数据的缓冲区。
      • size_t count:要读取的字节数。
    • write()参数:
      • int fd:文件描述符。
      • const void *buf:要写入的数据缓冲区。
      • size_t count:要写入的字节数。
    • 功能:可用于操作套接字,进行文件读写操作。

五、UDP 相关函数

  1. ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
    • 参数:
      • sockfd是本地的套接字 id。
      • buf是本地的数据存储,一般是要发送的数据。
      • len是要发送的数据长度。
      • flags是要发送数据方式,0 表示阻塞发送。
      • dest_addr是必选,表示要发送到的目标主机信息结构体。
      • addrlen是目标地址长度。
    • 功能:用于 UDP 协议中向对方发送数据。
    • 返回值:成功返回发送的数据长度,失败返回 -1。
  2. ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
    • 参数:
      • sockfd是本地的套接字 id。
      • buf是要存储数据的内存区,一般是数组或者动态内存。
      • len是要获取的数据长度,一般是buf的大小。
      • flags是获取方式,0 阻塞。
      • src_addr可选,表示对方的地址信息结构体,如果为NULL,表示不关心对方地址。
      • addrlen对方地址信息结构体大小,如果对方地址是NULL,则该值也为NULL
    • 功能:用于 UDP 协议中获取对方发送的数据。
    • 返回值:成功接收到的数据长度,失败返回 -1。

六、文件属性调整函数

  1. int fcntl(int fd, int cmd,... /* arg */)
    • 参数:
      • fd是要调整的文件描述符。
      • cmd是要调整的文件属性宏名称。
      • ...是可变长的属性值参数。
    • 功能:修改指定文件的属性信息。
    • 返回值:成功时不一定,看cmd;失败返回 -1。

七、IO 多路复用相关函数

  1. int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
    • 参数:
      • nfds是描述符的上限值,一般是链接后描述符的最大值 + 1。
      • readfds是只读描述符集。
      • writefds是只写描述符集。
      • exceptfds是异常描述符集。以上三个参数都是fd_set *的描述符集合类型。
      • timeout是检测超时时间,如果是NULL表示一直检测不超时。
    • 功能:完成指定描述符集合中有效描述符的动态检测。该函数具有阻塞等待功能,在函数执行完毕后,目标测试集合中将只保留最后有数据的描述符。
    • 返回值:超时返回 0,失败返回 -1,成功返回大于 0 的值,表示监听到的事件数。
  2. void FD_CLR(int fd, fd_set *set)
    • 参数:
      • fd是要删除的描述符编号。
      • set是描述符集合。
    • 功能:将指定的set集合中编号为fd的描述符号删除。
  3. int FD_ISSET(int fd, fd_set *set)
    • 参数:
      • fd是要判断的描述符编号。
      • set是描述符集合。
    • 功能:判断值为fd的描述符是否在set集合中,如果在则返回真,否则返回假。
  4. void FD_SET(int fd, fd_set *set)
    • 参数:
      • fd是要添加的描述符编号。
      • set是描述符集合。
    • 功能:将指定的fd描述符,添加到set集合中。
  5. void FD_ZERO(fd_set *set)
    • 参数:
      • set是描述符集合。
    • 功能:将指定的set集合中所有描述符删除。

 

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值