VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 716|回复: 4

怎样根据获取结构 socakaddr_in 中保存的IP地址和端口?

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-9 22:00:01 | 显示全部楼层 |阅读模式
如题!!
回复

使用道具 举报

0

主题

10

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-11 10:18:01 | 显示全部楼层
struct sockaddr {
  unsigned short sa_family; /* 地址族, AF_xxx */
  char sa_data[14]; /* 14 字节的协议地址 */ };
  sa_family一般为AF_INET;sa_data则包含该socket的IP地址和端口号。
  另外还有一种结构类型:
  struct sockaddr_in {
   short int sin_family; /* 地址族 */
   unsigned short int sin_port; /* 端口号 */
   struct in_addr sin_addr; /* IP地址 */
   unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */
  };
  这个结构使用更为方便。sin_zero(它用来将sockaddr_in结构填充到与struct sockaddr同样的长度)应该用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向 sockaddr_in的指针转换为指向sockaddr的指针;或者相反。sin_family通常被赋AF_INET;sin_port和 sin_addr应该转换成为网络字节优先顺序;而sin_addr则不需要转换。
  我们下面讨论几个字节顺序转换函数:
  htons()--"Host to Network Short" ; htonl()--"Host to Network Long"
  ntohs()--"Network to Host Short" ; ntohl()--"Network to Host Long"
  在这里, h表示"host" ,n表示"network",s 表示"short",l表示 "long"。
回复

使用道具 举报

0

主题

59

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-1-13 16:54:01 | 显示全部楼层
sockaddr_in saddr;

...

UHOSRT nPort = ntohs(saddr.sin_port);

CHAR* pszIP = inet_ntoa(saddr.s_addr);
回复

使用道具 举报

0

主题

24

帖子

19.00

积分

新手上路

Rank: 1

积分
19.00
发表于 2020-1-13 18:18:02 | 显示全部楼层
struct sockaddr_in                sockAddr;                               

DWORD        nIP= ntohl(sockAddr.sin_addr.S_un.S_addr);
WORD        nPort= ntohs(sockAddr.sin_port);       
回复

使用道具 举报

4

主题

16

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-1-14 16:36:01 | 显示全部楼层
DWORD        dwIP = inet_ntoa(addrClient.sin_addr);
UINT        nPort= ntohs(addrClient.sin_port);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表