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地址的轉換: