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

本文探讨了服务器启动过程中IP地址的获取方式及其实现细节,分析了不同方法的优缺点,并解释了为何启动服务器时实际上不需要获取本机IP地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

启动一个服务器的时候,服务器端需要做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上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值