UNIX網絡編程之套接字API

      套接字相關函數

int socket(int family, int type, int protocol); 該接口建立一個套接字
family指定協議族(一般是AF_INET);type參數指定socket的類型:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW;protocol一般賦值"0"。
 
int bind(int sockfd, struct sockaddr *my_addr, int addrlen); 將套接字綁定到IP地址和端口
 struct sockaddr_in 
 {
        short    sin_family;
        u_short  sin_port;
        struct   in_addr sin_addr;
        char     sin_zero[8];
};

 

一個綁定的實例:
struct sockaddr_in saddr;
memset((void *)&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(8888);端口號要大於1024
saddr.sin_addr.s_addr = htonl(INADDR_ANY); 綁定到本地IP
//saddr.sin_addr.s_addr = inet_addr("192.168.22.5"); 綁定固定IP
bind(ListenSocket,(struct sockaddr *)&saddr,sizeof(saddr));

 

     int listen(int sockfd, int backlog); 
 sockfd是socket系統調用返回的服務器端socket描述符;backlog指定在請求隊列中容許的最大請求數
     int accept(int sockfd, struct sockaddr *addr, int *addrlen); 
 sockfd是被監聽的服務器socket描述符,addr一般是一個指向sockaddr_in變量的指針,該變量用來存放提出鏈接請求的客戶端地址
 connect()函數用來與遠端服務器創建一個TCP鏈接其函數原型爲: 
      int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); 
 

發送接收數據相關函數

     int send(int sockfd, const void *msg, int len, int flags); 
      int recv(int sockfd,void *buf,int len,unsigned int flags); 
     int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to,int tolen);用於面向非鏈接socket(SOCK_DGRAM/SOCK_RAW)上進行數據傳輸
     int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen); 
      close(sockfd); close()是對套接字的操做,關閉後進程不能在訪問這個套接字。
 

IP、DNS等相關函數

 in_addr_t inet_addr(const char * strptr);將字符串IP地址轉換爲IPv4地址結構in_addr值
 char * inet_ntoa(struct in_addr * addrptr);將IPv4地址結構in_addr值轉換爲字符串IP
 struct hostent *gethostbyname(const char *name); 域名和IP地址的轉換:
相關文章
相關標籤/搜索