使用C# 32feet库连接小米与华硕设备蓝牙时遇地址无效错误
我尝试用C#通过蓝牙连接小米手机与华硕电脑,过程中出现**「请求的地址在其上下文中无效」**错误。
完整代码
BluetoothClient client; try { client = new(); } catch (Exception e) { Console.WriteLine("Turn your bluetooth on and try again."); return; } BluetoothDeviceInfo[] devices = client.DiscoverDevices(); Console.WriteLine("Bluetooth Devices: "); for (int i = 0; i < devices.Count(); i++) { Console.WriteLine(i + " - " + devices[i].DeviceName); } Console.Write("Choose the device to connect: "); int input = Convert.ToInt32(Console.ReadLine()); BluetoothDeviceInfo device = devices[input]; Console.WriteLine("Device adress: " + device.DeviceAddress.ToString()); BluetoothAddress bluetoothAdress = new(device.DeviceAddress.ToByteArray()); BluetoothEndPoint endPoint = new(bluetoothAdress, BluetoothService.HumanInterfaceDevice); try { client.Connect(endPoint); if (client.Connected) { Console.WriteLine("Connected successfully to " + device.DeviceName); }else { Console.WriteLine("Connection failed."); } } catch (Exception e) { Console.WriteLine("Could not connect: \n" + e.ToString()); }
错误信息
连接失败:
System.Net.Sockets.SocketException (10049): 请求的地址在其上下文中无效。684DB6B68F13:0000112400001000800000805f9b34fb
在 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
在 System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
在 InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.Connect(BluetoothEndPoint remoteEP)
在 InTheHand.Net.Sockets.BluetoothClient.Connect(BluetoothEndPoint remoteEP)
1. 修复蓝牙地址转换错误
你通过device.DeviceAddress.ToByteArray()创建BluetoothAddress的方式会导致字节顺序异常(蓝牙地址为大端序,ToByteArray()默认输出小端序)。直接使用设备原生的DeviceAddress即可:
// 替换原地址转换代码 BluetoothAddress bluetoothAdress = device.DeviceAddress;
2. 确认目标服务是否被设备支持
你指定的BluetoothService.HumanInterfaceDevice(HID服务)可能未在小米手机上启用或不兼容。可以先获取设备支持的所有服务,再选择可用的服务UUID:
// 获取设备支持的所有服务 ServiceRecord[] services = device.GetServiceRecords(); foreach (var service in services) { Console.WriteLine($"服务UUID: {service.ServiceId}"); } // 选择第一个可用服务创建连接端点 BluetoothEndPoint endPoint = new(device.DeviceAddress, services[0].ServiceId);
优先尝试BluetoothService.SerialPort(SPP串口服务),这是多数蓝牙设备通用的数据传输服务。
3. 确保设备已配对并授权
- 检查电脑蓝牙设置,确认小米手机已完成配对,且授予了「允许设备访问」的权限
- 手机端需确认已信任该电脑,允许蓝牙连接请求
4. 重置蓝牙适配器
- 关闭并重新开启电脑和手机的蓝牙模块,清除临时连接异常
- 确保电脑蓝牙适配器处于可发现状态
内容的提问来源于stack exchange,提问作者Melih

