请问,C语言socket编程中,客户端如何得到自己的IP?不要0.0.0.0

ymy1248227142 2012-04-19 10:08:13
因为客户端没有bind,所想要要一个函数在本地来得到客户端自己的IP,getsocketname返回的是0.0.0.0,我不要这个IP,请问有什么好的办法吗?
...全文
480 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ymy1248227142 2012-04-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 5 楼 的回复:

引用 4 楼 的回复:
引用 2 楼 的回复:

试试这个函数:
struct ifreq ifr;
strcpy(ifr.ifr_name, "eth0");
ioctl(sock_fd, SIOCGIFADDR, &ifr);
要是它有多个IP呢?不一定就是eth0啊。。。

那就多次吧
读取/proc/n……
[/Quote]哦,谢谢
qq120848369 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:
引用 2 楼 的回复:

试试这个函数:
struct ifreq ifr;
strcpy(ifr.ifr_name, "eth0");
ioctl(sock_fd, SIOCGIFADDR, &ifr);
要是它有多个IP呢?不一定就是eth0啊。。。

那就多次吧
读取/proc/net/dev可以看到有几个网卡
[/Quote]

恩,ioctl提供了相应的选项,应该是GET CONF选项,可以得到所有网卡的名字,然后使用你那个ADDR的参数就能获得IP了。
qq120848369 2012-04-19
  • 打赏
  • 举报
回复
不是getsockname吗,必须先发出一条消息,内核才会帮你随机绑定一个IP+PORT。

其他办法是没有的,如果想获得机器上的所有网卡,使用ioctl,参考《UNIX环境高级编程》
昵称很不好取 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 2 楼 的回复:

试试这个函数:
struct ifreq ifr;
strcpy(ifr.ifr_name, "eth0");
ioctl(sock_fd, SIOCGIFADDR, &ifr);
要是它有多个IP呢?不一定就是eth0啊。。。
[/Quote]
那就多次吧
读取/proc/net/dev可以看到有几个网卡
ymy1248227142 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

试试这个函数:
struct ifreq ifr;
strcpy(ifr.ifr_name, "eth0");
ioctl(sock_fd, SIOCGIFADDR, &ifr);
[/Quote]要是它有多个IP呢?不一定就是eth0啊。。。
昵称很不好取 2012-04-19
  • 打赏
  • 举报
回复
ifr里面就应该有ip地址了
昵称很不好取 2012-04-19
  • 打赏
  • 举报
回复
试试这个函数:
struct ifreq ifr;
strcpy(ifr.ifr_name, "eth0");
ioctl(sock_fd, SIOCGIFADDR, &ifr);
ymy1248227142 2012-04-19
  • 打赏
  • 举报
回复
用的UDP

1,543

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 Solaris
社区管理员
  • Solaris
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧