bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)); 二、inet_addr、 inet_aton、inet_ntoa inet_addr: 将网络地址转为网络二进制数字,返回的IP地址是网络序的。函数原型: unsigned long in inet_addr(const char *cp) inet_aton:将网络地址转为网络二进制数字,与inet_addr的区别是,结...
一个类型声明
在使用如 bind、connect、accept 等网络函数时,需要传递 struct sockaddr_in 的指针。例如,在 accept 函数中,服务器可以通过该函数获取到客户端的 struct sockaddr_in 信息: c int client_sock = accept(server_sock, (struct sockaddr *)&client_addr, &addrlen); ...
(struct sockaddr *)(&server_addr)这个是一个强制类型转换,就是将结构体&server_addr强制转换成struct sockaddr *类型。这个是c语言范畴的东西。因为我们只能创建和填充sockaddr_in和sockaddr_in6的结构体和里面的字段,但是很多socket参数只接受sockaddr类型的结构体,所以在这里要强制转换一下,就我记得...
inet_addr()是将一个点分制的IP地址(如192.168.0.1)转换为上述结构中需要的32位IP地址(0xC0A80001)。 通常的用法是: int sockfd; struct sockaddr_in my_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); /* 做一些错误检查! */ my_addr.sin_family = AF_INET; /* 主机字节序 */ ...
bind(listenfd, (struct servaddr *)&servaddr, sizeof(servaddr));listen(listenfd, 20);printf("Accepting connecting...\n");while(1){cliaddr_len = sizeof(cliaddr);connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &cliaddr_len);n = read(connfd, buf, MAXLINE);printf("receive ...
struct sockaddr_in是已经声明了的结构名,这里当作类型名来使用,如基础类型名int,double等等,addr被声明为struct sockaddr_in类型的变量,就像int a;中的a一样。
20 struct sockaddr_in server_addr; 21 22 server_addr.sin_family = AF_INET; 23 server_addr.sin_port = htons(8000); 24 server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); 25 bzero(&(server_addr.sin_zero), 8); 26 27 client_fd = socket(AF_INET, SOCK_STREAM, 0); ...
int inet_pton(int domain, const char *str, void *addr); 通常的用法是: int sockfd; struct sockaddr_in my_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); my_addr.sin_family = AF_INET; /* 主机字节序 */ my_addr.sin_port = htons(MYPORT); /* short, 网络字节序 */ ...
sockaddr是一个结构类型,它可以用来保存IP地址家族、IP地址和端口,这些合在一起称为“套接地址”。一个套接地址是保存在一个结构变量中的,它不是一个指针类型。my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针。