最近学习linux下的网络编程socket,感觉函数比较多,流程繁琐,所以坐下笔记 吧。
函数 | 用法 |
---|---|
int socket(int domain,int type,int protocol) | 创建通信接口,返回文件描述符,domain的主要取值:AF_UNIX,type代表网络采用的通讯协议,TCP->SOCK_STREAM,UDP->SOCK_DGRAM,因为指定type,所以protocol一般0, |
int bind(int sockfd,struct sockaddr *my_addr,int addrlen) | 绑定文件描述符和对应的数据结构,sockfd 为socket的返回文件描述符,sockaddr的具体在下面 |
int listen(int sockfd,int backlog) | sockfd 为文件描述符,backlog为排队最大长度 |
int accept(int sockfd,struct sockaddr *addr,int *addrlen) | addr是用来给客户端的程序填写,服务器只传指针接收,此函数调用时候,服务器会阻塞直到客户端发出连接,返回文件描述符 |
int connect(int sockfd,struct sockaddr *serv_addr,int addrlen) | connect是客户端用来连接服务端的,serv_addr储存服务器连接信息,sin_addr是服务端的地址 |
int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen) | buf为接收缓存区,from储存发送来源的信息,若对信息来源不感兴趣,可以设为NULL |
int sendto(int sockfd,const void *msg,int len,unsigned int flags,struct sockaddr *to,int len) | 同上,这个是发送,这俩个函数是基于UDP的 |
int shutdown(int sockfd,int howto) | close只关闭一个方向,howto=0,系统关闭读通道,但可以继续写,1,关闭写通道,可以读,3,关闭读写通道 |
h->host n->network s->short l->long 将网络上的数据转换为本机数据
unsigned long htonl(unsigned long hostlong)
unsigned short htons(unsigned short hostshort)
unsigned long ntohl(unsigned long netlong)
unsigend short ntohs(unsigned short netshort)
这是个函数经常从网络字符换换为本机字符
struct sockaddr_in{
unsigned short sin_faily;//AF_INET->Internet INADDR_ANY->any
unsigned short sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
}
bind,listen,accept 是服务端的函数,
以上就是基本的socket编程的函数,希望日后能熟练运用