答:如在SOCKET编程中的函数int bind(int sockfd,struct sockaddr*myaddr,int addrlen)中的的二个参数struct sockaddr*myaddr是一个指向结构体的指针,对吧?调用bind()程序如下bind(sockfd,(struct sockaddr*)&addr,sizeof(struct sockaddr_in)) ,(addr是自己定义的一个struct sockaddr_in结构体) --- 问:我想...
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(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的区...
sockaddr是一个结构类型,它可以用来保存IP地址家族、IP地址和端口,这些合在一起称为“套接地址”。一个套接地址是保存在一个结构变量中的,它不是一个指针类型。my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针。
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen); //功能:连接通信目标 //socketaddr:目标地址 三、网络通信的数据存储方式 个人计算机系统数据的存储方式可能是大端,也可能是小端,网络通信时需要的是大端数据,必须把数据转换成大端。
(struct sockaddr *)(&server_addr)这个是一个强制类型转换,就是将结构体&server_addr强制转换成struct sockaddr *类型。这个是c语言范畴的东西。因为我们只能创建和填充sockaddr_in和sockaddr_in6的结构体和里面的字段,但是很多socket参数只接受sockaddr类型的结构体,所以在这里要强制转换一下,就我记得...
struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(8080); inet_pton(AF_INET, "127.0.0.1", &(addr.sin_addr)); printSockAddr((struct sockaddr *)&addr); return 0; } ``` 在这个例子中,`printSockAddr`函数接收一个指向`struct sockaddr`的指针,并根据地址家族(address...
struct sockaddr_in是已经声明了的结构名,这里当作类型名来使用,如基础类型名int,double等等,addr被声明为struct sockaddr_in类型的变量,就像int a;中的a一样。
sockaddr_in 中存放端口号、网路层中的协议类型(ipv4,ipv6)等,网络层的IP地址;structsockaddr_in{sa_family_t sin_family;// Address family AF_XXX__be16 sin_port;// 端口号structin_addrsin_addr;// Internet Address/*Pad to size of 'struct sockaddr'*/...};//套接字地址结构体。structsockaddr...
} IN_ADDR; sin_family指代协议族,在socket编程中只能是AF_INET sin_port存储端口号(使用网络字节顺序) sin_addr存储IP地址,使用in_addr这个数据结构 sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。 s_addr按照网络字节顺序存储IP地址 ...