You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

32feet .NET库WinForms蓝牙连接异常:PC/手机连接失败求助

问题分析与解决方案

核心问题原因

你遇到的System.Net.Sockets.SocketException: 'The requested address is not valid in its context'错误,主要源于以下几点:

  • 服务UUID不匹配:硬编码使用的BluetoothService.SerialPort(UUID: 00001101-0000-1000-8000-00805f9b34fb)是蓝牙串行端口服务,但目标PC/手机可能未启用该服务,或需要使用其他适配的蓝牙服务。
  • 配对流程不规范:直接调用BluetoothSecurity.PairRequest(address, null)强制配对,部分设备(尤其是手机)依赖系统自带的配对弹窗完成验证,代码强制配对可能导致配对未真正生效。
  • 客户端实例管理混乱:ScanDevicesAsync中每次扫描都重新创建BluetoothClient实例,可能覆盖之前的连接对象,导致后续Connect操作使用的实例状态异常。

具体修复步骤

1. 适配目标设备的蓝牙服务

不同设备支持的蓝牙服务不同,建议先查询目标设备支持的服务,再选择可用服务连接,或尝试多个通用服务:

// 添加查询设备支持服务的方法
private BluetoothService[] GetSupportedServices(BluetoothDeviceInfo device)
{
    try
    {
        using var client = new BluetoothClient();
        var services = client.GetServices(device.DeviceAddress);
        return services.Select(s => s.ServiceClass).ToArray();
    }
    catch
    {
        return Array.Empty<BluetoothService>();
    }
}

2. 修正配对逻辑

移除代码中强制配对的逻辑,改为检查设备是否已配对,未配对则引导用户通过系统蓝牙设置完成:

// 移除原强制配对代码
// bool paired = BluetoothSecurity.PairRequest(address, null);
// if (!paired)
// {
//     MessageBox.Show("Failed to pair with the device");
//     return;
// }

// 替换为配对检查
if (!selectedDevice.Authenticated)
{
    MessageBox.Show("请先在系统蓝牙设置中完成与该设备的配对,再尝试连接");
    return;
}

3. 规范客户端实例管理

  • 扫描时使用临时BluetoothClient实例,避免干扰连接实例
  • 连接时创建独立实例,尝试多个通用服务:
private void btnConnect_Click(object sender, EventArgs e)
{
    if (listDevice.SelectedIndex < 0)
    {
        MessageBox.Show("请选择一个设备");
        return;
    }

    try
    {
        var selectedDevice = devices[listDevice.SelectedIndex];
        var address = selectedDevice.DeviceAddress;

        if (!selectedDevice.Authenticated)
        {
            MessageBox.Show("请先在系统蓝牙设置中完成与该设备的配对,再尝试连接");
            return;
        }

        richTextBoxLogs.AppendText($"尝试连接到地址: {address}\n");

        using var connectClient = new BluetoothClient();
        // 尝试多个通用蓝牙服务
        var servicesToTry = new[] { BluetoothService.SerialPort, BluetoothService.FileTransfer, BluetoothService.ObjectPush };
        bool connected = false;

        foreach (var service in servicesToTry)
        {
            try
            {
                connectClient.Connect(address, service);
                client = connectClient;
                connected = true;
                richTextBoxLogs.AppendText($"使用服务 {service} 连接成功\n");
                break;
            }
            catch (Exception ex)
            {
                richTextBoxLogs.AppendText($"尝试服务 {service} 失败: {ex.Message}\n");
                continue;
            }
        }

        if (!connected)
        {
            MessageBox.Show("尝试所有支持的服务均无法连接,请检查设备蓝牙设置");
            return;
        }

        richTextBoxLogs.AppendText($"已连接设备:\n");
        richTextBoxLogs.AppendText($"名称: {selectedDevice.DeviceName}\n");
        richTextBoxLogs.AppendText($"地址: {selectedDevice.DeviceAddress}\n");
        richTextBoxLogs.AppendText($"设备类别: {selectedDevice.ClassOfDevice}\n");
        richTextBoxLogs.AppendText("--------------------------------------------\n");

    }
    catch (Exception ex)
    {
        MessageBox.Show("连接错误: " + ex.Message);
    }
}

4. 优化监听逻辑

移除自定义PIN验证逻辑(系统会自动处理配对PIN),避免与系统流程冲突:

private async Task ListenForConnection()
{
    listener = new BluetoothListener(BluetoothService.SerialPort);
    listener.Start();

    while (true)
    {
        var bluetoothClient = await Task.Run(() => listener.AcceptBluetoothClient());
        var deviceName = bluetoothClient.RemoteMachineName;

        var result = MessageBox.Show($"{deviceName} 发起了连接请求,是否允许?", "蓝牙连接", MessageBoxButtons.YesNo);

        if (result == DialogResult.Yes)
        {
            client = bluetoothClient;
            MessageBox.Show("已连接到 " + deviceName);
        }
        else
        {
            bluetoothClient.Close();
        }
    }
}

额外注意事项

  • 确保应用以管理员权限运行,蓝牙操作可能需要较高权限
  • 目标设备需开启蓝牙并设置为可发现状态
  • 智能手机端需允许该应用的蓝牙连接权限

内容的提问来源于stack exchange,提问作者Shiroe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 23:50:02