Über Bluetooth (mit dem OBEX - Protokoll) Dateien an ein Android-Gerät senden



  • Hallo C/C++ Freaks,

    ich bin neu hier.

    Wie kann ich mit Hilfe der Windows-API (und möglichst wenig zusätzlicher Abhängigkeiten (libs,etc.) ) eine (oder mehrere) Dateien über Bluetooth senden.

    Dafür benötige ich höchstwahrscheinlich das OBEX - Protokoll.

    Mit der MS Visual C++ Entwicklungsumgebung (IDE, Compiler, Tools, Libs, Include, etc.) habe ich schon eine Bluetooth-Verbindung zu meinem Handy hinbekommen.
    Auch eine RFComm-Verbindung bekomme ich zustande. Dafür benötige ich aber eine zusätzliche APP auf meinem Handy.

    Aber ich möchte eine Datei von meinem Rechner (Server) an das Handy (Client) senden.
    (Über Bluetooth)

    Wie kann ich das bewerkstelligen ?

    Diese Tipps auf der Seite:
    hier
    haben mir bisher schon sehr geholfen.

    (Benötigt ein Win32-SDK >= 6a)

    Aber jetzt komme ich nicht weiter.

    Ja ich weis es ist in der heutigen Zeit, wo über 5G diskutiert wird und Wifi ein Standard ist, schon etwas bekloppt über eine langsame Bluetooth-Verbindung Dateien versenden zu wollen.
    Ich weis auch das es dafür das Tool "fsquirt" und weiter freie/kommerzielle Programme gibt, aber ich würde da lieber selber ein Programm basteln.

    Mit dem .Net Framework kann man ganz gut das Paket "32feet" nutzen.
    Dies ist sehr genial, weil es auch veschiedene Bluetooth-Treiber (HID - Devices) unterstützt und sehr viele einfach zu nutzende Funktionen bietet.

    So etwas wäre außerhalb der .Net - Welt aber noch toller.

    Ich bräuchte jetzt nach der Kenntnis über die Bluetooth-Adresse des Remote-Device und einer erfolgreichen Verbindung eine Möglichkeit zum senden von Dateien.

    Wie ich dafür z.B. "openobex" nutzen könnte weis ich nicht.
    obexftp funktioniert nur mit Linux.

    Es fehlt mir jetzt noch an einer einfachen Bibliothek für die Dateiübertragung.
    (Am besten in C)

    Für eine eigene Implementierung (und allem was dazugehört) des OBEX - Protokolls bin ich noch zu dämlich und es wäre mir auch zu umständlich.

    (Ich hantiere gerne mit diversen Libs)

    Danke im Vorraus.



  • Hat jemand Ahnung wie man das hier:
    btobex-library

    kompiliert ?

    VC++ wirft 100te Fehler
    (Diese 2 Libs: ws2_32.lib, irprops.lib sind natürlich hinzugefügt)



  • Was für Fehler? Die Bibliothek ist von 2010. Keine Ahnung, ob das noch funktioniert. Aber so viel Code ist das nicht, sollte man zumindest schnell kompilierbar bekommen. Wenn es die API´s überhaupt noch gibt.



  • Hallo Mechanics,
    die meisten Fehler-Meldungen sagen:

    Neudefinition; unterschiedliche Bindung,

    oder
    Makro-Neudefinition

    oder, oder, oder

    oder andere Fehler sagen:

    (Grob übersetzt)
    Benutze sichere Funktionen du Depp: Also die mit _s

    Es sind einfach sehr viele verschiedene Fehler.



  • Aber kannst du die lösen?
    Wie gesagt, seit 2010 hat sich schon ein bisschen was geändert, kann sein, dass man alten Code anpassen muss.



  • Aber kannst du die lösen?

    Nein!



  • Dann poste mal einen konkreten Fehler, und den dazu gehörigen Code.



  • @Mechanics sagte in Über Bluetooth (mit dem OBEX - Protokoll) Dateien an ein Android-Gerät senden:

    Dann poste mal einen konkreten Fehler, und den dazu gehörigen Code.

    Vorher bitte noch Visual Studio auf Englisch umstellen.

    @64bit sagte in Über Bluetooth (mit dem OBEX - Protokoll) Dateien an ein Android-Gerät senden:

    Benutze sichere Funktionen du Depp: Also die mit _s

    #define _CRT_SECURE_NO_WARNINGS
    

    Compilermeldungen bitte nicht übersetzen. Copy and Paste.



  • Ich habe es hinbekommen.

    Es kompiliert jetzt!

    (WIN32_LEAN_AND_MEAN ist sehr wichtig.)



  • Ich taste mich langsam ran.

    Zur Zeit versuche ich vergeblich hier:

    std::wstring devad = L"84:BE:52:B3:CA:B2";
    
        BTOBEX::Session* btObexSession = new BTOBEX::Session();
        bool connOk = btObexSession->Connect(devad, 5, 8192);
    
        std::cout << connOk;
    

    eine 1 zu bekommen.



  • Debug mal rein. Da sind irgendwelche WinApi Aufrufe dahinter. Was geben die zurück? Schau in die Doku, vielleicht kann man GetLastError oder so aufrufen.



  • Also ich bekomme entweder irgendwelche Zugriffsverletzungen oder einen Time-OUT-Fehler.

    Auch diese Änderung:

    bool Connect(Socket* sock, const std::wstring& devAddress, GUID service)
    			{
    				BTH_ADDR		btAddr = 0;
    				BTAddressFromString(devAddress, btAddr);
    
    				SOCKADDR_BTH	sockAddr = {0};
    				//ZeroMemory(&sockAddr, sizeof(SOCKADDR_BTH));
    				sockAddr.addressFamily = AF_BTH;
    				sockAddr.btAddr = btAddr;
    				sockAddr.serviceClassId = service;
    				sockAddr.port = (ULONG) BT_PORT_ANY; //port;
    
    				int ret = ::connect(sock->btSock, (sockaddr*)&sockAddr, sizeof(SOCKADDR_BTH));
    
    				if(ret == 0)
    					return true;
    
    				return false;
    			}
    

    in Header: BTSockSession.h
    bringt mich nicht weiter.



  • Es geht jetzt!
    Ich bekomme jetzt eine 1 zurück.

    Aber ich brauche dafür noch einen C++ Win-Api - Weg wie ich das COM-Bluetooth-Port setze.

    Wenn ich manuell in den Windows 10 - Bluetootheinstellungen ein COM-Port festlege und dieses als Portnummer übergebe funktioniert es, ansonsten nicht.


Log in to reply