网络编程 - 检查是否通过以太网 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,但如果仅通过以太网连接,则会引发异常。理想的解决方案:
- 输入
setSSID()
(或类似效果的内容) - 检查是否通过以太网连接
- 如果是这样,请返回
null
/0
/undefined
- 否则,返回SSID
(我已经检查了它是否连接到网络)
我已经查看了WMI和NetworkInfo命名空间,但都没有提供我正在寻找的内容。
在 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#
您可以捕获异常(您报告为Win32Exception
),并将其视为"没有可用的WiFi"条件。
如果您愿意,可以检查异常的ErrorCode
或HResult
属性,以确保这是您在缺少WiFi的情况下所期望的错误,而不是其他一些更有问题的异常。在后一种情况下,您可能希望重新引发异常(至少在您决定处理此类错误的良好策略之前)。
还有本机无线局域网API,您可以直接使用它来处理错误代码/结果,而不是处理异常。但我认为在您的情况下,处理抛出的异常是最简单的,因为它可以按照您想要的方式工作。