- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
考虑以下设置:带有 LAN 接口(interface)和 WiFi 接口(interface)(所有新笔记本电脑的标准配置)的 Windows PC。每个接口(interface)都可能与网络连接或断开连接。我需要一种方法来确定哪个适配器是连接到互联网的适配器 - 特别是,如果它们都连接到不同的网络,一个连接到互联网,一个不连接到互联网。
我目前的解决方案是使用 IPHelper 的“GetBestInterface”函数并为其提供 IP 地址“0.0.0.0”。
对于这个问题,您还有其他建议吗?
根据一些答案,让我详细说明一下:
@Chris Upchurch:这让我依赖于 google.com 的正常运行(通常不是问题)以及可能安装的任何允许 ping 的个人防火墙。
@Till:正如 Steve Moon 所说,依赖适配器的地址是有风险的,因为您对内部网络设置做了很多假设。
@Steve Moon:查看路由表听起来是个好主意,但我并没有自己应用路由逻辑,而是尝试使用如上所述的“GetBestInterface”。我相信它应该做的正是您在回答中概述的内容,但我不太确定。我不愿意实现自己的“路由逻辑”的原因是,与使用由更多“硬核”网络人员编写和测试的库/API 相比,我更容易出错。
最佳答案
从技术上讲,没有“连接到 Internet”。真正的问题是,哪个接口(interface)可路由到所需地址。现在,您正在查询“默认路线” - 如果不存在到目的地的特定路线,则适用该路线。但是,您忽略了任何特定路线。
幸运的是,对于 99.9% 的家庭用户来说,这就可以了。他们不太可能有很多路由表,并且 GetBestInterface 会自动优先选择有线而不是无线 - 所以你应该做好。为你搞砸的 0.1% 的案例添加一个覆盖选项,然后就到此为止。
但是,对于公司用途,您应该对特定目的地使用 GetBestInterface - 否则,如果有人与您的目的地在同一个 LAN 上,您就会遇到问题(这意味着您应该使用“内部”接口(interface),而不是“外部”)或具有到您目的地的特定路由(例如,我的内部网络可以与您目的地的网络对等)。
话又说回来,我不确定你打算用这个“连接到互联网”的适配器做什么,所以这可能没什么大不了的。
关于windows - 您如何找出哪个 NIC 已连接到 Internet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38864/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!