标的目的有点不合错误。
获取本机IP地址,一般是欠亨过socket那个路子,当然那个路子能够获得地址,但一般不会那么做。你能够查下getsockbyname那个函数。
至于那里为啥会显示0。0。0。0,可能是你在SOCKET理解上有点收支。
my_addr。sin_addr。s_addr在纷歧样的情形有纷歧样的含义,假设是TCP监听套接口,则它的含义是比力的尺度,而不是本机的IP。
例如你的机器,它有多个地址,起首127。0。0。1是它的回路地址,本机能够通过127。
0。0。1来拜候本身。其次他可能有一个内部局域网地址,例如说是192。168。1。5,局域收集(互联网)上机器都能够通过那个地址拜候你的机器。还有可能你的机器有一个外网地址,例如202。101。56。3,internet上的机器都能够通过那个地址拜候你的机器。
接下来说下my_addr。sin_addr。s_addr的含义:
假设你创建了TCP监听套接口,而且你施行的是 my_addr。sin_addr。s_addr赋值为127。0。0。1,意思就是仅有目标地址为127。
0。0。1的包才会被监听套接口获取,那就是一种后果,因为127。0。0。1是回路地址,底子就不会出网卡,假设其它机器输入127。0。0。1最初会被送回本身本机,包底子就不会抵达你的机器,也就是那种接口只能够承受本身当地的包。假设内网的机器发送包目标地址是你的局域网地址192。
168。1。5,而且端口也是你那个套接口监听的端口,可惜的是那个端口只收目标地址是127。0。0。1的包,192。168。1。5的包会被丢弃。那种接口最末成果就是只收本机的包。
假设绑定的是192。168。1。5的地址,则任何目标地址是192。
168。1。5的包城市被承受(当然端口必需是一致)。那种只能够局域收集(互联网)上的机器包会被你的端口收到,外网则不成,原因很容易,外网的192。168。1。5的包是不成能通过路由抵达你的机器。
假设是你的外网地址,则同理任何外网地址抵达的包城市被收到。
假设是INADDR_ANY,则意思就是不管目标地址是啥,城市被你承受。可能有点难以想象,但安心,路由器不会让啥地址的包城市抵达你的主机的。
总之就是那个是监听的尺度,而不是你的IP,你以至能够把它设置成别人的IP地址,但可惜的是别人的IP地址的包,路由器是不会转发给你的,因而你啥都不会收到。
(至少在当今以太网做为局域网的全国你是收不到的,路由器不转发。不晓得令牌环网或其它的局域网会如何,当然即便是以太网也能够用ip棍骗的手艺,那有点扯远了)。
不晓得我说请不清晰。