Linux网络编程常用API(一)

// 1、地址结构体(sockaddr)
#include <bits/socket.h>
struct sockaddr
{
	sa_family_t sa_family;			// 地址族: AF_UNIX、AF_INET、AF_INET6
	char sa_data[15];				// 地址值
}

// 2、地址结构体(sockaddr_in)
#include <sys/un.h>
struct sockaddr_in
{
	sa_family sin_family;			// 地址族: AF_UNIX、AF_INET、AF_INET6
	u_int16_t sin_port:				// 端口号, 要用网络字节表示
	struct in_addr sin_addr;		// IPv4地址结构体
}

// 3、IPv4地址结构体
struct in_addr
{
	u_int32_t s_addr;				// IPv4地址,要用网络字节表示
}

// 4、点分十进制字符串转换为IPv4地址
#include <arpa/inet.h>
/*
 * 函数: inet_addr
 * 参数: strptr(点分十进制字符串表示的IP地址)
 * 返回: IPv4地址
 */
in_addr_t inet_addr(const char* strptr);

/*
 * 函数: inet_aton
 * 参数: cp(点分十进制字符串表示的IP地址)
 *       inp(指向IPv4地址结构的指针)
 * 返回: IPv4地址
 */
int inet_aton(const char* cp, struct in_addr* inp);

// 5、IPv4地址转换为点分十进制字符串 inet_ntoa
/*
 * 函数: inet_ntoa
 * 参数: in(IPv4地址结构体)
 * 返回: 点分十进制字符串表示的IP地址
 */
char* inet_ntoa(struct in_addr in);

// 6、创建socket
#include <sys/types.h>
#include <sys/socket.h>
/*
 * 函数: socket
 * 参数: domain(底层协议族 PF_INET、PF_INET6、PF_UNIX)
 *       type(服务类型 SOCK_STREAM、SOCK_DGRAM)
 *       protocol(协议, 0表示默认协议)
 * 返回: 点分十进制字符串表示的IP地址
 */
int socket(int domain, int type, int protocol);

// 7、命名socket
#include <sys/types.h>
#include <sys/socket.h>
/*
 * 函数: bind
 * 参数: sockfd(socket描述符)
 *       my_addr(地址)
 *       addrlen(地址长度)
 * 返回: 0(成功)
 *       -1(失败)
 */
int bind(int sockfd, const struct sockaddr* my_addr, socklen_t addrlen);

// 8、监听socket
#include <sys/socket.h>
/*
 * 函数: listen
 * 参数: sockfd(socket描述符)
 *       backlog(内核监听队列的最大长度)
 * 返回: 0(成功)
 *       -1(失败)
 */
int listen(int sockfd, int backlog);

// 9、接受连接
#include <sys/types.h>
#include <sys/socket.h>
/*
 * 函数: accept
 * 参数: sockfd(socket描述符)
 *       addr(被连接的远端socket地址)
 *       addrlen(地址长度)
 * 返回: 新的socket(成功)
 *       -1(失败)
 */
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

// 10、发起连接
#include <sys/types.h>
#include <sys/socket.h>
/*
 * 函数: connect
 * 参数: sockfd(socket描述符)
 *       serv_addr(服务器监听的socket地址)
 *       addrlen(地址长度)
 * 返回: 0(成功)
 *       -1(失败)
 */
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);

// 11、关闭连接
#include <unistd.h>
/*
 * 函数: close
 * 参数: fd(socket描述符)
 * 返回: 0(成功)
 *       -1(失败)
 */
int close(int fd);

#include <sys/socket.h>
/*
 * 函数: shutdown
 * 参数: sockfd(socket描述符)
 *       howto(SHUT_RD、SHUT_WR、SHUT_RDWR)
 * 返回: 0(成功)
 *       -1(失败)
 */
int shutdown(int sockfd, int howto);

// 12、TCP数据读写
#include <sys/types.h>
#include <sys/socket.h>
/*
 * 函数: recv
 * 参数: sockfd(socket描述符)
 *       buf(接收缓冲区)
 *       len(缓冲区大小)
 *       flags(控制参数, 通常设置为0即可)
 * 返回: 实际读取到的数据长度(成功)
 *       0(对方已关闭了连接)
 *       -1(失败)
 */
ssize_t recv(int sockfd, void *buf, size_t len, int flags);

/*
 * 函数: send
 * 参数: sockfd(socket描述符)
 *       buf(发送缓冲区)
 *       len(缓冲区大小)
 *       flags(控制参数, 通常设置为0即可)
 * 返回: 实际发送的数据长度(成功)
 *       -1(失败)
 */
ssize_t send(int sockfd, const void *buf, size_t len, int flags);

// 13、UDP数据读写
#include <sys/types.h>
#include <sys/socket.h>
/*
 * 函数: recvfrom
 * 参数: sockfd(socket描述符)
 *       buf(接收缓冲区)
 *       len(缓冲区大小)
 *       flags(控制参数, 通常设置为0即可)
 *       src_addr(发送端地址)
 *       addrlen(地址长度)
 * 返回: 实际读取的数据长度(成功)
 *       -1(失败)
 */
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);

/*
 * 函数: sendto
 * 参数: sockfd(socket描述符)
 *       buf(发送缓冲区)
 *       len(缓冲区大小)
 *       flags(控制参数, 通常设置为0即可)
 *       dest_addr(接收端地址)
 *       addrlen(地址长度)
 * 返回: 实际写入的数据长度(成功)
 *       -1(失败)
 */
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

// 14、获取地址信息
#include <sys/socket.h>
/*
 * 函数: getsockname
 * 参数: sockfd(socket描述符)
 *       address(本端地址)
 *       address_len(地址长度)
 * 返回: 0(成功)
 *       -1(失败)
 */
int getsockname(int sockfd, struct sockaddr *address, socklen_t *address_len);

/*
 * 函数: getpeername
 * 参数: sockfd(socket描述符)
 *       address(远端地址)
 *       address_len(地址长度)
 * 返回: 0(成功)
 *       -1(失败)
 */
int getpeername(int sockfd, struct sockaddr *address, socklen_t *address_len);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值