网络编程 - 检查是否通过以太网 C# 连接

本文关键字:以太网 连接 检查 是否 网络编程 | 更新日期: 2023-09-27 17:55:19

我已经阅读了一些这方面的资料。我遵循了这个公认的答案,如果我通过 WiFi 连接,我正在使用托管 WiFi API 来获取 SSID。这是我的代码:

private void setSSID() {
    WlanClient wlan = new WlanClient();
    Collection<String> connectedSsids = new Collection<string>();
    foreach (WlanClient.WlanInterface wlanInterface in wlan.Interfaces) {
        Wlan.Dot11Ssid ssid = wlanInterface.CurrentConnection.wlanAssociationAttributes.dot11Ssid;
        connectedSsids.Add(new String(Encoding.ASCII.GetChars(ssid.SSID, 0, (int)ssid.SSIDLength)));
    }
}

如果我通过 WiFi 连接,这将完美地获得 SSID,但如果仅通过以太网连接,则会引发异常。理想的解决方案:

  1. 输入setSSID()(或类似效果的内容)
  2. 检查是否通过以太网连接
  3. 如果是这样,请返回null/0/undefined
  4. 否则,返回SSID
    (我已经检查了它是否连接到网络)

我已经查看了WMINetworkInfo命名空间,但都没有提供我正在寻找的内容。
WlanApi.cs 中查找,此处抛出异常:

public Wlan.WlanConnectionAttributes CurrentConnection {
    get {
        int valueSize;
        IntPtr valuePtr;
        Wlan.WlanOpcodeValueType opcodeValueType;
        Wlan.ThrowIfError(
            Wlan.WlanQueryInterface(client.clientHandle, info.interfaceGuid, Wlan.WlanIntfOpcode.CurrentConnection, IntPtr.Zero, out valueSize, out valuePtr, out opcodeValueType));
        try {
            return (Wlan.WlanConnectionAttributes)Marshal.PtrToStructure(valuePtr, typeof(Wlan.WlanConnectionAttributes));
        }
        finally {
            Wlan.WlanFreeMemory(valuePtr);
        }
    }
} 

还看过:

  • 检查是否连接到 Wi-Fi 网络 C#

网络编程 - 检查是否通过以太网 C# 连接

您可以捕获异常(您报告为Win32Exception),并将其视为"没有可用的WiFi"条件。

如果您愿意,可以检查异常的ErrorCodeHResult属性,以确保这是您在缺少WiFi的情况下所期望的错误,而不是其他一些更有问题的异常。在后一种情况下,您可能希望重新引发异常(至少在您决定处理此类错误的良好策略之前)。

还有本机无线局域网API,您可以直接使用它来处理错误代码/结果,而不是处理异常。但我认为在您的情况下,处理抛出的异常是最简单的,因为它可以按照您想要的方式工作。