我正在用 C# 编写一个应用程序,其中一项功能需要根据网络连接执行不同的操作。
例如; 当PC连接到家庭网线时执行MethodA 当PC连接到家庭网络但Wifi然后执行MethodB 当PC连接到建筑物1的办公网络时执行MethodC 当PC连接到建筑物2的办公网络时执行MethodD 当PC连接到朋友家庭网络执行方法E
在这里我如何区分不同的网络?
我正在用 C# 编写一个应用程序,其中一项功能需要根据网络连接执行不同的操作。
例如; 当PC连接到家庭网线时执行MethodA 当PC连接到家庭网络但Wifi然后执行MethodB 当PC连接到建筑物1的办公网络时执行MethodC 当PC连接到建筑物2的办公网络时执行MethodD 当PC连接到朋友家庭网络执行方法E
在这里我如何区分不同的网络?
我会使用一些关于网络的信息来解决这个问题。如果您使用无线网络,您会知道有线网卡没有 IP。然后根据 IP 方案,您可以推断出您所在的位置。您将不得不了解有关网络的一些信息。
例如,如果您的工作为您分配了子网范围内的 IP,10.1.0.1-40
而您的家庭网络为您分配了 IP,192.168.1.2-255
那么您可以使用该信息来决定您的应用程序的功能。
不幸的是,这是一个非常松散的耦合,如果路由方案发生变化,那么您的应用程序可能会中断。我会让这种设置可配置,您可以在其中创建一个将 ip 方案映射到“位置”的配置,并将其用作您所做工作的基础。
如果您将网络映射到 Windows 中的位置,则可以使用此问题中的答案来帮助如何确定 .NET 中的“网络位置”?.
我相信您可以可靠地检测机器是否通过无线或电缆连接到本地路由器。
但是,更进一步,我认为您会遇到很多问题。
如果它们在 Vista 或更高版本上,您应该能够获得正在使用的网络的“名称”。但是,这必须正确配置,并且不能由最终用户使用。
除此之外,您当然可以检查分配给您的 IP 地址范围……但是,假设建筑物 1 和 2 发出不同的范围,并且这些范围与家庭网络发出的范围不同。此外,家庭网络和朋友家庭网络完全有可能在同一个内部范围内。
我想说,您的应用程序最好询问用户使用什么方法,或者给他们方法的名称,或者通过询问其他类型的问题来给您一个提示。