服务器启动与本机IP获取问题_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 服务器启动与本机IP获取问题

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

 2013/12/5 21:26:02  须等待  程序员俱乐部  我要评论(0)
  • 摘要:启动一个服务器的时候,服务器端需要做Socket的绑定,以前没有仔细的研究过这一块的API,今天做了一些研究,特此记录按照一般的思路,绑定一个Socket,首先要查找到本机的IP地址,查找本机的IP地址有两种思路:1、是直接取物理设备的信息,然后去筛选;优点:绝对不会漏IP缺点:不能直接定位想取的IP,可能会取到虚拟机的IP,外网IP、内网IP一堆IP2、是用Java的API;第一个API是根据本机名来取IP,第二个API是根据localhost来取API
  • 标签:问题 服务器 服务 启动
启动一个服务器的时候,服务器端需要做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上。

发表评论
用户名: 匿名