服务器启动与本机IP获取问题

启动一个服务器的时候,服务器端需要做Socket的绑定,以前没有仔细的研究过这一块的API,今天做了一些研究,特此记录

按照一般的思路,绑定一个Socket,首先要查找到本机的IP地址,查找本机的IP地址有两种思路:
1、是直接取物理设备的信息,然后去筛选;
    优点:绝对不会漏IP
    缺点:不能直接定位想取的IP,可能会取到虚拟机的IP,外网IP、内网IP一堆IP
2、是用Java的API;
    第一个API是根据本机名来取IP,第二个API是根据localhost来取API,这两个API最后都会在本机的hosts里找映射的IP,windows是%系统盘%/system32/drivers/etc/hosts,linux是/etc/hosts。本机名和localhost在hosts文件里的配置会直接影响到API取出的IP
3、构建一个Socket去连接别的网站,然后通过创建的socket获得本机的IP,这种做法不太优雅,但是可行性比较高,可以保证取到外网IP

但是事实上,启动一个服务器应用并不需要获知本机的IP地址,这里来自协议的限定是,TCP是端到端的连接,这里的端到端是TCP端到TCP端的连接,对于一个服务器来说,TCP端也就是网卡,由于服务器通常都有多个网卡,所以对于绑定IP的Socket,只有发往特定服务器特定网卡的消息,才能被Socket所接收。但是操作系统在协议的基础上做出了更多的支持,在linux上,用netstat -ap 可以看到服务器网卡上监听的情况,Local Address *:54321,这里的*代表监听当前服务器上所有网卡接收的到的54321端口的消息。

结论:启动一个服务器,不需要知道本机的IP,只需要绑定端口,剩下的工作,交给操作系统,操作系统会把没有指定IP的socket绑定到机器上的所有IP上。

猜你喜欢

转载自ygydaiaq-gmail-com.iteye.com/blog/1985820