免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8071 | 回复: 6
打印 上一主题 下一主题

关于获取ip 的getsockname问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-12 12:32 |只看该作者 |倒序浏览
为什么我用getsockname取的的ip事127.0.0.1??

论坛徽章:
0
2 [报告]
发表于 2006-01-12 12:59 |只看该作者
我用ifconfig -a 看到的我的eth0 是192.168.64.28  lo 的是127。0。0。1 我该如何取到192.168.64.28的 ip呢 ?

论坛徽章:
0
3 [报告]
发表于 2007-11-05 17:54 |只看该作者
我也遇到这样的问题,不知LZ怎么解决的?

论坛徽章:
0
4 [报告]
发表于 2007-11-05 18:17 |只看该作者
原帖由 wuzhao 于 2007-11-5 17:54 发表
我也遇到这样的问题,不知LZ怎么解决的?


以前写过一个获取本机IP的代码. 你看看

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<sys/types.h>
  4. #include<fcntl.h>
  5. #include<string.h>
  6. #include<net/if.h>
  7. #include<net/if_arp.h>
  8. #include<sys/ioctl.h>
  9. #include<netinet/in.h>
  10. #include<arpa/inet.h>
  11. #include<netdb.h>
  12. int main()
  13. {
  14.         int socktemp;
  15.         struct ifreq ifr;
  16.         struct sockaddr_in clientadd;
  17.         char myip[20] = {0};
  18.         socktemp = socket(AF_INET, SOCK_DGRAM, 0);
  19.         if (socktemp == -1)
  20.         {
  21.                 printf("socket dgram erron \n");
  22.                 return -1;
  23.         }
  24.         strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
  25.         ifr.ifr_name[IFNAMSIZ-1] = 0;
  26.         if (ioctl(socktemp, SIOCGIFADDR, &ifr) < 0)
  27.         {
  28.                 printf("ioctl error\n");
  29.                 return -1;
  30.         }
  31.         memcpy(&clientadd, &ifr.ifr_addr, sizeof(clientadd));
  32.         sprintf(myip, "%s", inet_ntoa(clientadd.sin_addr));
  33.         printf("ip is :%s\n", myip);
  34.         return 0;
  35. }

复制代码

论坛徽章:
0
5 [报告]
发表于 2007-11-05 19:08 |只看该作者
多谢scutan
现在我碰见的问题有点不一样,是通过建立的sockfd来获取绑定的ip地址,服务器调用bind函数之
前未指定IP地址。客户端主动连接后,服务器调用getsockname获取地址族。查看获取后的ip是
127.0.0.1。 服务端ip:192.168.0.100,客户端ip:192.168.0.101

论坛徽章:
0
6 [报告]
发表于 2007-11-05 19:40 |只看该作者
原帖由 wuzhao 于 2007-11-5 19:08 发表
多谢scutan
现在我碰见的问题有点不一样,是通过建立的sockfd来获取绑定的ip地址,服务器调用bind函数之
前未指定IP地址。客户端主动连接后,服务器调用getsockname获取地址族。查看获取后的ip是
127.0.0.1。 ...


应该是可以的啊.
你的getsockname的第一个参数应该是accpet()返回的那个描述符哦. 你再试试. 另外你在调之前你的getsockname()的第三个参数len必须赋值为sizeof(struct sockaddr_in);
才可以.
你再试试看. 如果不行就请把代码贴上来看看.

论坛徽章:
0
7 [报告]
发表于 2007-11-06 10:44 |只看该作者
不好意思  是偶看错了
scutan说的没错 这样是能够正确获得ip的~~谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP