Socket基本API 总结

套接字建立过程:

srever:
1 socket创建套接字
2 bind ip和port
3 listen
4 accept
5 read/write
6 close

client:
1 socket
2 connect
3 read/write
4 close
int socket(int domain, int type, int protocol);
//失败返回-1,成功返回文件描述符
//domain 套接字协议族 type数据类型 protocol通信协议信息

int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);

int listen(int sockfd, int backlog);

int accept(int sockfd, struct sockaddr *addr,socklen_t *addrlen);

int connect(int sockfd, struct,sockaddr *serv_addr, socklen_t, addrlen);
/*
成功返回0,失败返回-1
*/

协议族:
PF_INET, PF_INET6,PF_LOCAL等

套接字类型:
SOCK_STREAM 面向连接
SOCK_DGRAM 面向消息

文件描述符:

int open(const char *path, int flag);
//path 地址,flag打开方式

int close(int fd);
//成功返回0,失败返回-1

//写入文件:
ssize_t write(int fd, const void *buf, size_t, ntypes);
//失败返回-1,成功返回写入的字节数

//读取文件
ssize_t read(int fd, void *buf, size_t nbytes);
//失败返回-1,成功返回接收的字节数

IPv4结构体

struct sockaddr_in
{
    sa_family_t    sin_family; //地址族
    uint16_t       sin_port;   //端口号
    struct in_addr sin_addr;   //32位ip
    char           sin_zero[8];//不使用   
};

struct in_addr
{
    In_addr_t   s_addr;        //32位iPv4地址
}

地址族: AF_INET,AF_INET6,AF_LOCAL

字节序转换:

unsigned short htons(unsigned short);
unsigned short ntohs(unsigned short);
unsigned short htonl(unsigned short);
unsigned short ntohl(unsigned short);
/*
h代表主机(host)字节序
n代表网络(network)字节序
s是short
l是long
*/

in_addr_t inet_addr(const char *string);
//返回32位大端整数值,失败返回INADDR_NONE

int inet_aton(const char *string, struct in_addr * addr);
//成功返回1,失败返回0
//将字符串32位ip地址转换为整数

char *inet_ntoa(struct in_addr adr);
//成功返回地址值,失败返回-1
//将整数ip转换为字符串

UDP函数

ssize_t sendto(int sock, void *buff, size_t ntypes, int flags, struct sockaddr *to, socklen_t addrlen);

ssize_t recvfrom(int sock, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen);

断开函数shutdown

int shutdown(int sock, int howto);
/*
第二个参数是断开方式:
SHUT_RD    断开输入流
SHUT_WR    断开输出流
SHUT_RDWR  同时断开O/I流
*/

IP与域名的转换

struct hostent * gethostbyname(const char *hostname);
//通过域名获得ip

struct hostent * gethostbyaddr(const char *addr, socklen_t len, int family);
//通过ip获得域相关信息

struct hostent
{
    char * h_name;       //official name
    char ** h_aliases;   //alias list 
    int h_addrtype;      //host address type
    int h_length;        //address length
    char ** h_addr_list; //address list
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值