最近學習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編程的函數,希望日後能熟練運用