`
guoyiqi
  • 浏览: 966169 次
社区版块
存档分类
最新评论

sockaddr与sockaddr_in比较

 
阅读更多

struct sockaddr {
unsigned short int sa_family; /* address family, AF_xxx */
char sa_data[14]; /* address */
};

sa_family是地址家族,是“AF_xxx”的形式。常设为“AF_INET”,代表Internet(TCP/IP)地址族。

sa_data是协议地址,由sa_family决定。如果sa_family=AF_INET,则sa_data就是sockaddr_in的sin_addr和sin_port。换句话说,这时sockaddr可以当作sockaddr_in看。

struct sockaddr_in {
short int sin_family; /* Address family */
unsigned short int sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[8]; /*to make same size as struct sockaddr */
};
struct in_addr {
unsigned long s_addr;
};

sin_family意义与sa_family同。
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
在 in_addr结构体中,s_addr按照网络字节顺序存储IP地址。

sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度,可以用bzero()或memset()函数将其置为零。指向sockaddr_in的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr类型时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反。

分享到:
评论

相关推荐

    Linux C中sockaddr和sockaddr_in的区别

    主要介绍了Linux C中sockaddr和sockaddr_in的区别的相关资料,需要的朋友可以参考下

    apache启动报错:httpd: apr_sockaddr_info_get() failed

    重启apache:service httpd restart虽然重启成功,但却给出如下的提示信息:httpd: apr_sockaddr_info_get() failed for hoteelhttpd: Could not reliably determine the server’s fully qualified domain name, ...

    网络文件传输程序

    struct sockaddr_in server_addr; struct sockaddr_in client_addr; char buff[BUFSIZ]; char fname[255]; //用于存放文件名 FILE * fp; server_addr.sin_family = AF_INET; server_addr.sin_port = htons...

    VB-API.rar_API_api vb versionEx_vb api_vb api sockaddr_in

    VB的函数大全,从网上下载的,VB调用API的函数,希望各位能有用

    Linux网络编程 Socket UDP形式(包括服务器端和接收端)

    struct sockaddr_in my_addr; //服务器网络地址结构体 struct sockaddr_in their_addr; //客户端网络地址结构体 int sin_size; if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1);...

    socket 聊天源码

    struct sockaddr_in server_address; struct sockaddr_in client_address; server_sockfd=socket(AF_INET,SOCK_STREAM,0); server_address.sin_family=AF_INET; server_address.sin_addr.s_addr=htonl('192....

    Socket编程 c语言 (最新 带例程 可直接编译运行)

    struct sockaddr_in remote_addr; /* 客户端地址信息 */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror( "socket创建出错!"); exit(1); } my_addr.sin_family=AF_INET; my_addr.sin_port=...

    上位机MFC-线程应用TCPSocket通信

    绑定端口 bind(listen_sock, (struct sockaddr*) &local_addr, sizeof(SOCKADDR_IN)), 等待连接,accept(listen_sock, (struct sockaddr *)&client_addr, &iaddrSize)), while(1)里 接收数据。 发送数据,用...

    网络编程函数(练习与实例)

    server_addr.sin_addr=*((struct in_addr *)host->;h_addr); /* 客户程序发起连接请求 */ if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr) )==-1) { fprintf(stderr,"Connect Error:...

    利用socket实现通信

    struct sockaddr_in local; struct sockaddr_in from; int fromlen =sizeof(from); local.sin_family=AF_INET; local.sin_port=htons(1000); ///监听端口 local.sin_addr.s_addr=INADDR_ANY; ///本机

    linux网络编程(编程初步)

    server_addr.sin_addr=*((struct in_addr *)host->;h_addr); /* 客户程序发起连接请求 */ if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr) )==-1) { fprintf(stderr,"Connect Error:...

    Socket和数据库的一些使用

    struct sockaddr_in server_addr; pthread_mutex_t mut; struct kevent events[10]; //IP地址、端口和协议族 server_addr.sin_len = sizeof(struct sockaddr_in); server_addr.sin_family = AF_INET; server_...

    telnet_clinet.zip

    server_addr.sin_addr=*((struct in_addr *)host->h_addr); /* 客户程序发起连接请求 */ if(connect(sockfd,(struct sockaddr *)(&server;_addr),sizeof(struct sockaddr))==-1) { fprintf(stderr,"Connect ...

    套接字编程

    SOCKADDR_IN addr; }; void InitListenSocket(SOCKET& Listen_Socket) { int ret; WSADATA wsadata; int Port = 5150; SOCKADDR_IN Server_Addr; if ((ret = WSAStartup(MAKEWORD(2,2), &wsadata)) != 0) { ...

    嵌入式系统设计与应用课程设计报告.doc

    //服务器阻塞监听套接字,循环等待客户端程序连接 while(1) { sin_size = sizeof(struct sockaddr_in); //如果建立连接,将产生一个全新的套接字 if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_...

    WinSocket 常用函数及结构

    sockaddr_in fd_set timeval WSAStartup WSACleanup htons htonl ntohs ntohl inet_addr inet_ntoa socket closesocket bind listen connect accept select send recv send 、sendto 、recv 、...

    网络文件传输程序源代码

    33 struct in_addr sin_addr; //IP鍦板潃 34 unsigned char si_zero[8]; //濉厖0浠ヤ繚鎸佷笌sockaddr缁撴瀯鐨勯暱搴︾浉鍚? 35 }; 36 3銆乮nt connect(int sockfd,const struct sockaddr *serv_addr,socklen_...

    Android NDK中socket的用法以及注意事项分析

    Android NDK中使用socket的整个过程分为以下几部分:第一部分: 创建socket并绑定...sockaddr_in addr_org; // 发送端地址sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // 创建socketaddr_org.sin_family = AF_IN

    Socket编程

    Struct in_addr{ In_addr_t s_addr; // 32 位IP 地址,网络字节序 } Struct sockaddr_in{ Uint8_t sin_len;//IPv4 为固定的16 字节长度 Sa_family_t sin_family; //地址簇类型,为AF_INET In_port_t sin_port; //16...

    crc校验小程序,服务端

    //sin_size = sizeof(struct sockaddr_in); client_fd = -1; while(client_fd== -1) { client_fd = accept(sockfd, NULL, NULL); } bytesRecv = recv(client_fd, recvbuf, MAXDATASIZE, 0); printf(...

Global site tag (gtag.js) - Google Analytics