void out_addr(struct sockaddr_in *clientaddr) { //将端口从网络字节序转换成主机字节序 int port = ntohs(clientaddr->sin_port); char ip[16]; memset(ip, 0, sizeof(ip)); //将ip地址从网络字节序转换成点分十进制 inet_ntop(AF_INET, &clientaddr->sin_addr.s_addr, ip, sizeof(ip)); ...
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是通用的socket地址,具体到Internet socket,用下面的sockaddr_in结构,二者可以进行类型转换 struct sockaddr_in { short int sin_family; /* 地址族 */ unsigned short int sin_port; /* 端口号 */ struct in_addr sin_addr; /* Internet地址 */ unsigned char sin_zero[8]; /* 与struct sockaddr...
struct sockaddr_in是已经声明了的结构名,这里当作类型名来使用,如基础类型名int,double等等,addr被声明为struct sockaddr_in类型的变量,就像int a;中的a一样。
一个类型声明
struct sockaddr_in clientaddr, serveraddr; listenfd = socket(AF_INET, SOCK_STREAM, 0);//生成socket文件描述符 setnonblocking(listenfd);//把socket设置为非阻塞方式 epfd=epoll_create(256);//生成用于处理accept的epoll专用的文件描述符 ev.data.fd=listenfd;//设置与要处理的事件相关的文件描述符 ...
SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1) //无限循环 { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf[100]; sprint(sendBuf,”Welcome %s to [url]http://www.sunxin.org/[/url]“, inet_ntoa(addrClient.sin_addr)); send(sockConn,sendBuf,s...
sockaddr是一个结构类型,它可以用来保存IP地址家族、IP地址和端口,这些合在一起称为“套接地址”。一个套接地址是保存在一个结构变量中的,它不是一个指针类型。my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针。
(struct sockaddr *)(&server_addr)这个是一个强制类型转换,就是将结构体&server_addr强制转换成struct sockaddr *类型。这个是c语言范畴的东西。因为我们只能创建和填充sockaddr_in和sockaddr_in6的结构体和里面的字段,但是很多socket参数只接受sockaddr类型的结构体,所以在这里要强制转换一下,就我记得...
struct sockaddr_in clientaddr, serveraddr; listenfd = socket(AF_INET, SOCK_STREAM, 0);//生成socket文件描述符 setnonblocking(listenfd);//把socket设置为非阻塞方式 epfd=epoll_create(256);//生成用于处理accept的epoll专用的文件描述符 ev.data.fd=listenfd;//设置与要处理的事件相关的文件描述符 ...