2017-01-17 4 views
-2

Dieser Code funktioniert gut mit Java Bluecove Bluetooh Library. Es ist nur eine Hauptmethode, um eine direkte RFCCOMM-Verbindung zu testen.RFCOMM Bluetooth Direktverbindung: von BlueCove zu In der Hand 32Feet

Ich versuche, das gleiche in C# basierend auf "In The Hand 32Feet" Dienstprogramm libray zu tun Ich möchte einen Textbefehl senden und eine Antwort vom Gerät erhalten.

für Java-basierte On BlueCove (Adaequat!)

String serverURL = "btspp://XXXXXXXXXXXX:1;authenticate=false;encrypt=false;master=false";  
StreamConnection sc = (StreamConnection) MicroeditionConnector.open(serverURL); 
DataOutputStream os = sc.openDataOutputStream(); 

String text = "Send command"; 
byte data[] = text.getBytes(); 

os.write(data); 
os.flush(); 
os.close();  

BufferedReader reader = new BufferedReader(new InputStreamReader(sc.openInputStream())); 
StringBuilder out = new StringBuilder(); 
String line; 
while ((line = reader.readLine()) != null) { 
     System.out.println(line); 
     out.append(line); 
} 
System.out.println("Receive data" + out.toString()); 
reader.close();  

für C# in der Hand 32 Feet

Dies ist mein aktueller Versuch Umwandlung in C# basiert. ... aber das Problem ist, dass ich nicht auf peerStream zugreifen kann geschlossen ist? (gibt immer CanRead auf false zurück).

Wie Sie in dem Java BlueCove Beispiel sehen können, ist möglich, eine Verbindung mit einem doppelten Zweck zu öffnen: Output auf Befehle zu schreiben und ein Input das Ergebnis zu lesen sequenziell

Kann ich dies tun, in einer anderen Art und Weise?

String address = "00:00:00:00:00:00"; 
Guid mUUID = new Guid("00000000-0000-0000-0000-0000500b34fb"); 

BluetoothAddress addr = BluetoothAddress.Parse(address); 
var btEndpoint = new BluetoothEndPoint(addr, mUUID); 
var btClient = new BluetoothClient(); 
btClient.connect(btEndpoint); 

Stream peerStream = btClient.GetStream(); 
using (StreamWriter sw = new StreamWriter(peerStream)) 
{ 
    sw.WriteLine("Send command"); 
    sw.Flush(); 
    sw.Close(); 
} 

if (peerStream.CanRead) 
{ 
    using (StreamReader sr = new StreamReader(peerStream)) 
    { 
    while (sr.Peek() >= 0) 
     { 
     Debug.WriteLine("Receive data" + sr.ReadLine()); 
     } 
    sr.Close(); 
    }  
} 
btClient.Close(); 
btClient.Dispose(); 

Antwort

1

denke ich, der Anruf an sw.Close() als auch den zugrunde liegenden Stream schließt, einen damit Sie von peerStream lesen kippen nach sw schließen.

würde ich so etwas wie dies versuchen:

 String address = "00:00:00:00:00:00"; 
     Guid mUUID = new Guid("00000000-0000-0000-0000-0000500b34fb"); 

     BluetoothAddress addr = BluetoothAddress.Parse(address); 
     var btEndpoint = new BluetoothEndPoint(addr, mUUID); 
     var btClient = new BluetoothClient(); 
     btClient.connect(btEndpoint); 

     using (Stream peerStream = btClient.GetStream()) 
     using (StreamWriter sw = new StreamWriter(peerStream)) 
     { 
      sw.WriteLine("Send command"); 
      sw.Flush(); 

      if (peerStream.CanRead) 
      { 
       using (StreamReader sr = new StreamReader(peerStream)) 
       { 
        while (sr.Peek() >= 0) 
        { 
         Debug.WriteLine("Receive data" + sr.ReadLine()); 
        } 
       } 
      } 
     } 
+0

Vielen Dank! Ihre Antwort funktioniert ordnungsgemäß. – Sara

Verwandte Themen