per C++ Bluetooth ansteuern zum Datei übertragen



  • Hallo allerseits,

    ich soll programmieren, dass während der Laufzeit eines Programms (auf einem Pocket PC) eine txt-Datei, die in dieser Laufzeit erstellt und gefüllt wird, per Bluetooth zu einem Laptop übertragen wird. Prinzipiell kann auch die Datei unmittelbar nach dem Speichern kopiert werden oder eben gleich auf dem PC erstellt und befüllt werden. Hat jemand davon Ahnung und kann mir Tipps geben wo ich mich belesen kann oder gar schon ein paar Zeilen oder Funktionen nennen kann ? Weiß da überhaupt nicht, wo ich ansetzen soll und kann die Komplexität auch nicht so einschätzen.
    Ich bin schon seit Stunden wie wild am googlen.





  • Ich hab auch schon BT programmiert es ist nicht so schlimm kannst es ja wie einen normalen COM-Port verwenden.
    Schau mal wie das geht und dann wenn es konkrete Fragen gibt melde dih wieder



  • Schönen Dank, MFK ! Über den Link bin ich nun auf folgendes gestoßen:

    #include <stdio.h>
    #include "winsock2.h"
    
    void main() {
    
      WSADATA wsaData;
      SOCKET SendSocket;
      sockaddr_in RecvAddr;
      int Port = 27015;
      char SendBuf[1024];
      int BufLen = 1024;
    
      //---------------------------------------------
      // Initialize Winsock
      WSAStartup(MAKEWORD(2,2), &wsaData);
    
      //---------------------------------------------
      // Create a socket for sending data
      SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    
      //---------------------------------------------
      // Set up the RecvAddr structure with the IP address of
      // the receiver (in this example case "123.456.789.1")
      // and the specified port number.
      RecvAddr.sin_family = AF_INET;
      RecvAddr.sin_port = htons(Port);
      RecvAddr.sin_addr.s_addr = inet_addr("123.456.789.1");
    
      //---------------------------------------------
      // Send a datagram to the receiver
      printf("Sending a datagram to the receiver...\n");
      sendto(SendSocket, 
        SendBuf, 
        BufLen, 
        0, 
        (SOCKADDR *) &RecvAddr, 
        sizeof(RecvAddr));
    
      //---------------------------------------------
      // When the application is finished sending, close the socket.
      printf("Finished sending. Closing socket.\n");
      closesocket(SendSocket);
    
      //---------------------------------------------
      // Clean up and quit.
      printf("Exiting.\n");
      WSACleanup();
      return;
    }
    

    @Polofreak und @MFK: heißt das, dass man wenn man nur eine txt-datei von PDA auf rechner schicken will, dass man nur den obigen Code braucht ? irgendwie kommt ich nicht ganz voran mit dem thema.
    wichtig wäre eben für mich auch noch, über welchen port bluetooth läuft und wo man im obigen code die zu übermitteltende datei angibt.
    außerdem bleibt für mich fraglich, wie die verbindung des pdas und des rechners läuft. im allgemeinen muss man sich doch erstmal auf einander synchronisieren. läuft das automatisch oder muss ich dafür noch irgendwas im code eingeben ???



  • In deinem Code steht, das der Port. über den Bluetooth läuft 27015 ist...
    Du musst halt nur anstelle von

    inet_addr("123.456.789.1");
    

    Deine IP Adresse inet_addr(...) des Bluetooth adapters übergeben...

    Mfg
    Devil Enterteinmant



  • Naja, das ist ja nur ein Beispiel für die sendto-Funktion. Ich hab keine Ahnung ob das so wie es ist auch über Bluetooth funktioniert. Ich kanns auch gerade schlecht testen. Und über einen Standard Port für Bluetooth finde ich auch nichts, so dass ich nicht beurteilen kann, ob der Post richtig ist, so wie er in dem Beispielcode steht. Außerdem wo gibt man die Daten an, die man übertragen will ? In welchem Form muss man sie wo angeben ?



  • MatzeMeyer schrieb:

    Und über einen Standard Port für Bluetooth finde ich auch nichts

    Es gibt keinen "Standardport" für Bluetooth. Bluetooth ist ein Kommunikationsstandard, kein Netzwerkprotokoll. Über Bluetooth kannst du eine Vielzahl von Diensten laufen lassen. Netzwerkdienste und serielle Verbindungen mit virtuellen Com-Ports sind nur einige Beispiele. Es gibt auch direkte Dateiübertragung (wie im "Senden An"-Kontextmenü im Explorer).

    Daher kann man das nicht einfach so in einem Codebeispiel abbilden. Welche Art von Dienst wolltest du denn nutzen? Hast du dir darüber überhaupt schon Gedanken gemacht? Sind die Geräte, zwischen denen übertragen werden soll, schon gepaart?



  • naja also wenn du mich fragst baust du grad für nen Haustiervogel nen Junge auf! Wieso willst du das Netzwerktechnisch lösen? Warum willst du über TCP/IP gehen? Du kannst BT ganz einfach wie einen com Port nutzen, wenn du sie pairst legst du ja den comPort fest, was aber gar nichts mit deinem Port zu tun hat!!



  • Polofreak schrieb:

    Du kannst BT ganz einfach wie einen com Port nutzen, wenn du sie pairst legst du ja den comPort fest,

    Wie gesagt, das ist nur einer der Dienste, die über Bluetooth laufen können. Man kann auch ein Netzwerk über BT laufen lassen. Aber wenn sein Zielsystem diesen Dienst nicht anbietet, bringt das gar nichts.



  • klar logo aber über netzwerk ist doch in seinem fall sehr wahrscheinlich viel zu kompliziert wenn er nur ein file schreiben will.
    Über nen comport sähe so z.B. schon ne send und ne recieve aus:

    int CSerial::SendData(char *buffer, int nLen)
    {
    	DWORD dwBytesWritten;
    
    	if(!m_bOpened || m_hIDComDev == NULL)
    		return(-1);
    
    	WriteFile(m_hIDComDev, (LPSTR) buffer, nLen, &dwBytesWritten, &m_OverlappedWrite);
    
    	return((int)dwBytesWritten);
    
    }
    
    //reads Data from COM-Port
    int CSerial::ReadData(char *buffer)
    {
    	if(!m_bOpened || m_hIDComDev == NULL) 
    		return(-1);
    
    	DWORD dwBytesRead;
    
    	if(WaitForSingleObject(m_OverlappedWrite.hEvent, 500))
    		if(!ReadFile(m_hIDComDev, buffer, dwBytesRead, &dwBytesRead, &m_OverlappedRead))
    			return(-2);
    
    	return((int)dwBytesRead);
    }
    


  • Ja, also Netzwerkgeschichten und so sind viel zu kompliziert, denke ich. Ich will einfach nur ein einziges file auf einen einzigen rechner schieben. ich hab mir das jetzt so gedacht: datei aufm pda erstellen und speichern und dann auf rechner per bluetooth schicken.
    am elegantesten äre natürlich die datei gleich aufm rechner zu schreiben ohne das groß speicherplatz aufm pda benutzt wird, aber ich weiß nicht, ob das möglich ist. denn auf dem pda muss auf jeden fall das c++-programm ablaufen.
    polofreak, wo packe ich denn bei dir die send und wo die read funktion hin ?



  • gepairt sind die geräte (also pda und rechner) natürlich bereits.



  • naja einfach so wie es ist kannst du es ja nicht verwenden, das waren ja nur beispiele. Ich bin eigentlich nicht so der freund von komm ich progg es dir einfach drum einfach nur noch ein paar hinweise mach dir am besten ne Klasse CSerial und in die machste ne open ne send ne recieve dann solltest noch was haben wo du start- stop- databit setzt und so hast du schon mal was gelesen wie man was über nen Com Port sendet? weil das was ich dir grad schreib sind eigentlich grundlegende Sachen.



  • Nein, da hast Du mich falsch verstanden, Polofreak ! Ich will kein Programm geschrieben kriegen, sondern nur die Verbindung von dem was Du gepostet hast, zu dem was ich auf der MS-Seite mit sendto gefunden habe, hinkriegen. Ich bin bei dem Thema absolut dumm, hab weder jemals was an nen COM-Port noch sonst irgendwie aus meinem PC heraus (oder eben aus dem PDA heraus) gesendet oder empfangen. Und ich setz mich hier auch nicht einfach hin und sag mir: lass die mal machen, sondern schaue sehr viel in Büchern und im Netz dazu. Nur irgendwie haben alle Leute andere Wege und das Thema scheint irgendwie für mich als Newbie kaum auf bestimmte wichtige Dinge eingrenzbar. Ich find immer wieder neues und kann das irgendwie nicht zuordnen.



  • Hier gibt es die Grundlagen. Wäre nicht schlecht, da mal reinzuschauen. Nein, besser, wirklich durchlesen und verstehen. Danach verstehst du das.

    Serial Communication 😉



  • Als sehr gute implementierung der seriellen Schnittstelle würde ich folgende empfehlen:
    Serial library for C++
    [url=http://www.codeproject.com/system/cserialport.asp]CSerialPort v1.03 - Serial Port Wrapper
    [/url]



  • Ok, Leute, schönen Dank für die Links, habs überflogen, aber dadurch gleichzeitig wieder noch zusätzlich Wege gefunden, die scheinbar Datenaustausch bewirken. Mir ist diese Socket-Geschichte des Quellcodes von mir bzw. der Microsoftseite irgendwie am sympathischsten. Nur was bewirke ich damit ? Weiß denn hier jemand, ob das Ding, was ich da gepostet habe, schon etwas sendet. Man, wenn ich nicht gerade unterwegs wäre, würde ich das alles mal sebst testen, aber ich komme zur Zeit nicht an den Rechner mit embed Visual C++ und ner Bluetooth Schnittstelle !!!



  • // Send a datagram to the receiver 
      printf("Sending a datagram to the receiver...\n"); 
      sendto(SendSocket, 
        SendBuf, 
        BufLen, 
        0, 
        (SOCKADDR *) &RecvAddr, 
        sizeof(RecvAddr));
    

    das sendet dir dienen SendBuf was in dienem Fall ein char-Array ist. Dem solltest du noch irgendwas zuweisen, weil du sonst kein Plan hast was drin steht.



  • Muss ich denn so prinzipiell ne send-Funktion aufm PDA haben und (!) ne receive-Fkt. auf dem PC oder geht das auch nur mit Code auf dem PDA ?



  • @Polofreak: das Problem was ich damit einfach immernoch habe, ist, dass ich noch immer nicht weiß, was auf dem Zielsystem, sprich dem PC dann mit den Daten passiert. Kann man Dateien komplett rüberschicken vom Quell- zum Zielsystem (und wenn ja wie, denn dann muss die Datei ja irgendwo landen) oder muss man auf dem Zielsystem ein Script laufen haben, dass permanent den Port-Eingag überwacht und ankommende Daten in eine Datei formt ?


Anmelden zum Antworten