IP 地址
1234567891011121314151617struct in_addr{unsigned int s_addr}#include <netinet/in.h>unsigned long int htonl(unsigned long int hostlong);unsigned short int htons(unsigned short int hostshort);本地转网络字节序unsigned long int ntohl(unsigned long int hostlong);unsigned short int ntohs(unsigned short int hostlong);网络转本地字节均以无符号数转换网络字节摩恩为:大端,即有效地位存放在地址高位#include<arpa/inet.h>int inet_aton((const char*cp, struct in_addr *inp);点分十进制串(cp)转网络字节序IP(inp)int inet_ntoa (struct in_addr in);网络字节序IP 转点分十进制Domain structure
123456789101112#include <netdb.h>struct host{char *h_name; // domain namechar **h_aliases; // Null-terminated array of domain namesint h_addrtype; // host type (AF_INET)int h_length; // length of addr in byteschar **h_addr_list; // Null-terminated array of in_addr strcuts}struct hostent * gethostbyname(const char* name);strcut hostent *gethostbtaddr(const char* addr,int len(sizeof(addr)),int type(AF_INET))success none -null return, else set h_errnoSocket structure
1234567891011#include<netinet/in.h>struct sockaddr{unsigned short sin_family; // address falily (AF_INET)char sa_data[14]; // address data};struct sockaddr_in{unsigned short sin_family;// AF_INETunsigned short sin_port; // port numberunsigned short sin_addr; // IP addressunsigned char sin_zero[8] // pad}Socket function
1234567891011121314151617#include <sys/typs.h>#include <sys/socket.h>int socket(inr domain, SOCK_TREAM, int protoctol);成功非负,失败-1常规调用 : clinetfd = socket(AF_INET,SOCK_STREAM,0);int connect(int sockfd, struct sockaddr * server_addr, int addrlen);成功0,失败-1connect函数与套接字地址为serv_addr服务器连接,阻塞直到连接成功int bind(int sockfd, struct *my_addr, int len);success 0,eles -1将my_addr服务器套接字地址与套接字描述符sockfd绑定,addrlen = sizeof(sockaddr_in);int listen(int sockfd, int backlog);成功0,失败-1将sockfd从主动套接字转为监听套接字,backlog 设置拒绝连接前的等待队列请求数量int accept(int listenfd, struct sockaddr *adr, int * addrlen);成功非负,失败-1等待到达侦听描述符sockfd的连接请求,将客户端套接字地址写入addr, 并返回已链接符数据传输
send12345#include <sys/socket.h>ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);ssize_t sendto(int sockfd, const void *buf, size_t nbytes, int flags, const struct sockaddr *destaddr, socklen_t destlen);ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);Returns: number of bytes sent if OK, −1 on error
sendto可在无连接端口上指定目标地址
receive
123 ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags);ssize_t recvfrom(int sockfd, void *restrict buf, size_t len, int flags, struct sockaddr *restrict addr, socklen_t *restrict addrlen);ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);