检查是否通过以太网C#连接

时间:2016-07-06 19:27:16

标签: c# network-programming

我已经阅读了一些相关资料。我按照this接受的答案,如果我通过WiFi连接,则使用Managed 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 (如果它已连接到网络,我已经收到了支票)
  5. 我查看了 WMI NetworkInformation 命名空间,但都没有提供我要查找的内容。
    查看 WlanApi.cs < / em>,抛出异常:

    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);
            }
        }
    } 
    

    另见:

1 个答案:

答案 0 :(得分:2)

您可以捕获异常(您报告为Win32Exception),并将其视为“无WiFi可用”条件。

如果您愿意,可以查看ErrorCodeHResult属性以查看异常情况,以确保在缺少WiFi的情况下出现错误,而不是其他更多问题例外。在后一种情况下,您可能希望重新抛出异常(至少在您决定处理 类型的错误的良好策略之前)。

还可以直接使用native wireless LAN API,从中处理错误代码/结果,而不是处理异常。但我认为在你的情况下,处理抛出的异常是最简单的,因为它可以正常工作。