[gelöst] boost Socket.write_some() mit unsigned char



  • Hallo!

    Ich darf mich in der Schule mit C++ beschäftigen und habe eine Aufgabenstellung, bei der ich zwei unsigned char wegschicken soll.
    Wir lernen an sich schon seit 4 Jahren Programmieren in der Schule, aber das is eins der ersten C++ Beispiele die ich programmiert habe, deswegen bin ich wohl noch etwas überfordert v.A. mit der riesigen Boost-Library.
    Als Library verwenden wir wie gesagt boost, da die Programme plattformunabhängig sein sollen.

    typedef struct {   
        unsigned char state1;
        unsigned char state2;
    } InfoMsg;
    
    void sendInfo() {
    	InfoMsg infomsg = { state1, state2};
    
    	boost::array<InfoMsg,1> arr = {infomsg};
    
    	try {
    		outputSocket.write_some(buffer(arr));
    	} catch  (std::exception& e) {
    		std::cerr << e.what() << std::endl;
    	}
    }
    

    Die Variablen state1 und state2 sind global und es werden ihnen schon im Vorhinein passende Werte zugewiesen.
    Ich habe auch probiert ein Array von mit zwei unsigned char anzulegen und (auf die gleiche Art wie oben) wegzuschicken, allerdings mit dem selben Ergebnis:
    "write_some: Der angegebene Dateihandle ist ungültig"
    (Entferne ich das try/catch crashed das Programm mit der Fehlermeldung "boost::exception_detail::clone_impl<boost::exception_detail::error_info_injectorboost::system::system\_error > an Speicherposition 0x0020f088..", die mich leider auch nicht weitergebracht hat)
    Auch die size des Arrays beim Konstruktor des Buffers mitzugeben hat mich nicht weitergebracht.

    Ich hoffe ihr könnt mir weiterhelfen!
    Sollten irgendwelche Codestücke noch relevant sein bitte schreibt das einfach rein, ich hab das Beispiel auf ein Minimum gekürzt



  • Dein Socket ist ungültig, vielleicht hast du ihn irgendwo geschlossen. Aber mach bitte das typedef weg.

    Und du musst dich nicht mit C++ beschäftigen, du darfst es.



  • Vielen Dank für die schnelle Hilfe!
    Die Methode in der ich die Verbindung erstelle haut anscheinend nicht ganz hin.

    Wie meinst du das mit dem typedef?
    Nur jetzt hier im Code oder komplett? Weil das typedef steht in einem Headerfile wo die gesamten Nachrichten definiert sind die gesendet werden.

    Ok, der fehler Lag daran, dass ich keine Verbindung zu meiner VM habe. Wenn ich nichtmal pingen kann, wunders mich nicht, dass er keine TCP-Verbindung aufbauen kann. 😉



  • struct InfoMsg {  
        unsigned char state1;
        unsigned char state2;
    };
    


  • Was genau macht das für einen Unterschied? (das hab ich von meinem Auftraggeber so bekommen, will da ehrlich gesagt nicht dran rumpfuschen wenn ich mich nicht auskenne was da jetzt anders ist)



  • Das ist die C++-Variante, die vom Auftraggeber ist die C-Variante.



  • Gut. Vielen herzlichen Dank dir nochmal!


Anmelden zum Antworten