gpt4 book ai didi

c++ - C/C++检测网络类型

转载 作者:行者123 更新时间:2023-11-28 08:23:22 25 4
gpt4 key购买 nike

我需要编写一个 win32 c/c++ 应用程序,它能够确定运行它的 PC 是否连接到两个网络之一。第一个网络是公司局域网(没有互联网连接),第二个网络是一个独立的交换机,连接了一台 PC(运行程序的 PC)。

我是网络编程的新手,但到目前为止我已经尝试测试以查看是否可以映射我们 LAN 上的网络驱动器。如果 PC 连接到 LAN,此方法工作正常,驱动器映射成功,因此 LAN 检测成功。但是,如果 PC 连接到交换机,这会导致非常长的超时,这是不合适的,因为它会延迟程序以至于使其无法使用。

有人有其他建议吗?

我在 VS 6.0 中使用 c/c++

[更新]

在尝试一些不同的想法并查看下面的一些建议时,我认为我应该更新一些额外的信息,因为我认为许多(如果不是全部)建议都行不通。

(1) 上述局域网完全没有外部连接,完全隔离,无法解析外部DNS或ping网站。

(2) 主机名、MAC 地址、IP、默认网关、子网等(基本上您在 ipconfig -all 中看到的所有内容)都是手动配置的(不是从路由器动态配置的)因此检查这些设置中的任何一个都会返回相同的结果无论是连接到局域网还是交换机。

(3) 由于第 (2) 点,任何与交换机通信的尝试似乎都不成功,事实上几乎所有网络命令(ping、arp 等)似乎都失败了 - 我认为是由于机器试图连接当它不存在时连接到 LAN :-(

我发现的一件事是 ping 连接到交换机时超时的默认网关 IP。这没问题,因为我可以减少 ping 的超时时间,这样它不仅会挂起很长时间,而且感觉有点像 hack,我当然会很感激任何更好的解决方案。

谢谢

最佳答案

就 TCP/IP 而言,不存在 WAN 上的 LAN 这样的东西。有一组非 Internet 可路由地址,如 192.168.x.x 和 10.x.x.x,但这些地址有时会被 IP 地址不足的 ISP 使用。

最好的办法是在建立 TCP/IP 连接时使用异步 API。为此,WIN32 定义了一整套 OVERLAPPED API。这将防止您的应用程序在等待远程连接时停止运行。

或者将套接字内容放入另一个线程,然后仅在操作完成时通知 UI。

关于c++ - C/C++检测网络类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com