目前我正在尝试在标签打印机 RPP320 上连接和打印文本。我正在使用 C# 和 Xamarin.Forms。

所以我有 3 种不同的方法来连接到打印机,但它们都失败了。

foreach (var parcelUuid in parcelUuids)
{
    mBluetoothAdapter.CancelDiscovery();
    //METHOD A

    try
    {
        var method = Device.GetType().GetMethod("createRfcommSocket");
        mmSocket = (BluetoothSocket)method.Invoke(Device, new object[] { Port });
        mmSocket.Connect();
        Debug.WriteLine("Connected...");
        isConnected = true;
        DoDeviceConnected();
        break;
    }
    catch (Exception e)
    {

    }

    //METHOD B

    try
    {
        var method = Device.GetType().GetMethod("createInsecureRfcommSocket");
        mmSocket = (BluetoothSocket)method.Invoke(Device, new object[] { Port });
        mmSocket.Connect();
        Debug.WriteLine("Connected...");
        isConnected = true;
        DoDeviceConnected();
        break;
    }
    catch (Exception e)
    {

    }

}

if (!isConnected)
{
    //METHOD C

    try
    {
        IntPtr createRfcommSocket = JNIEnv.GetMethodID(Device.Class.Handle, "createRfcommSocket", "(I)Landroid/bluetooth/BluetoothSocket;");
        // JNIEnv.GetMethodID(device.Class.Handle, "createRfcommSocket", "(I)Landroid/bluetooth/BluetoothSocket;");
        IntPtr _socket = JNIEnv.CallObjectMethod(Device.Handle, createRfcommSocket, new global::Android.Runtime.JValue(Port));
        mmSocket = Java.Lang.Object.GetObject<BluetoothSocket>(_socket, JniHandleOwnership.TransferLocalRef);
        /*
        mmSocket =
            mBluetoothAdapter.GetRemoteDevice(Device.Address)
                .CreateRfcommSocketToServiceRecord(
                    UUID.FromString("00001101-0000-1000-8000-00805F9B34FB"));
        */
        mmSocket.Connect();
        DoDeviceConnected();
    }
    catch (IOException connectException)
    {

        Debug.WriteLine("IO Error: " + connectException.Message);
        // Unable to connect; close the socket and get out
        try
        {
            mmSocket.Close();
        }
        catch (IOException closeException)
        {
            Debug.WriteLine("Error: " + closeException.Message);
        }
        throw new Exception(connectException.Message);
        return;
    }
}
  • 在方法 A 中,此代码为 null 变量返回 method => var method = Device.GetType().GetMethod("createRfcommSocket");
  • 在方法 B 中,此代码为 null 变量返回 method => var method = Device.GetType().GetMethod("createInsecureRfcommSocket");
  • 在方法 C 中,此代码 => mmSocket.Connect(); 抛出异常:



  • 我不确定问题出在哪里,我是否应该继续这种方法并尝试修复它并更改我连接到打印机的方式。

    我在 stackoverflow 和其他平台上发现了几个关于这个问题的其他问题,但其中大部分是我们用 Java 编写的解决方案,或者不适用于我的情况。

    预先感谢您的帮助!

    最佳答案

    我找到了另一种方法。下面是以下代码:

    if (this.mBluetoothAdapter.IsEnabled)
    {
        BluetoothDevice device = this.mBluetoothAdapter.GetRemoteDevice(Device.Address);
    
        var serialUUID = UUID.FromString("00001101-0000-1000-8000-00805f9b34fb");
    
        BluetoothSocket socket = device.CreateRfcommSocketToServiceRecord(serialUUID);
        socket.Connect();
    }
    

    这个对我有用。

    我不认为这是连接的最佳选择,但它是一种解决方法,同时我找到了以前的代码的解决方案。

    关于c# - Xamarin.Forms - 读取失败,套接字可能关闭或超时,读取 ret : -1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46433911/

    10-17 00:17