objektorientiert Programmieren



  • Guten Morgen,
    ich schreibe derzeit ein Kommunikationsprotokoll.
    Der Client kann schon seine Anfrage an den Server schicken und ich kann auch eine Eingangsbestätigung vom Server an den Client zurückschicken aber eigentlich möchte ich, dass der Server was anderes zurückschickt und zwar einen string den er vorher bearbeitet hat. Dieser String beinhaltet die Position wo sich der Client befindet.
    Hier der Quellcode:

    int handleVersion(string buffer){
    string actualLine;
    string ID;
    string func;
    string colour_H;
    string colour_S;
    string colour_V;
    int H;
    int H_lower;
    int H_upper;
    int S;
    int S_upper;
    int V;
    int V_upper;
    istringstream stream_2(buffer);
    while(stream_2!=0){
    getline(stream_2, actualLine);
    if (!strcmp(actualLine.substr(0,8).c_str(),"MyRoboID")){
    ID = actualLine.substr(11);
    cout << "MyRoboID " << actualLine.substr(11) << endl;
    }
    else if(!strcmp(actualLine.substr(0,7).c_str(), "MyFunct")){
    func = actualLine.substr(9);
    cout << "MyFunct" << actualLine.substr(9) <<endl;
    }
    else if(!strcmp(actualLine.substr(0,9).c_str(), "MyColourH")){
    colour_H = actualLine.substr(12);
    H = atoi(colour_H.c_str()); //string to int
    H_lower = H-10;
    H_upper = H+10;
    }
    else if(!strcmp(actualLine.substr(0,9).c_str(), "MyColourS")){
    colour_S = actualLine.substr(12);
    S = atoi(colour_S.c_str());
    if (S==100){
    S_upper = 255;
    }
    else
    colour_S = S;
    }
    else if(!strcmp(actualLine.substr(0,9).c_str(), "MyColourV")){
    colour_V = actualLine.substr(12);
    V = atoi(colour_V.c_str());
    if (V==100){
    V_upper = 255;
    }
    else
    colour_V = V;
    }
    }
    string message;
    Position colour = getCoordinates(cvScalar(H_lower,0,0,0), cvScalar(H_upper,S_upper,V_upper,0));

    n = send(sock,message.c_str(),255,0);
    return 0;
    }

    Mein Problem ist, dass er nun sowohl colour.x und colour.y in der message drin haben soll. Am besten untereinander. Wie mache ich das?

    Danke schon mal!



  • Google mal nach std::stringstream, damit kannst du das ganz einfach machen. Dann verbessert sich auch gleich dein C/C++ Mischmasch mit atoi etc.
    Wenn du schon ein Kommunikationsprotokoll entwirfst, warum willst du darin die Daten als String serialisieren?



  • mein Problem war, wenn ich mit stringstream gearbeitet habe, bekam ich einen hexadezimalcode und nicht die eigentliche zahl die dahinter steckt.

    also theoretisch könnte ich die Daten, weil es ja Koordinaten sind auch als integer schicken.

    nur so wirklich weiß ich immernoch nicht wie ich colour.x und colour.y in ein Protokoll verpacken soll.
    Ich würde gerne, dass der Server an den Client es ähnlich wie ein HTTP Protokoll verschickt. Sprich zeilenweise.
    So hätte ich es gerne:
    message = "yourPositionX = 100\r\nyourPositionY = 50\r\n\r\n";
    dann könnte ich auf der Clientseite es wieder weiter verarbeiten



  • Von selbst kommt da kein hex raus.

    http://ideone.com/GLWVA1

    Du hast sicher versucht den Stream auszugeben und nicht den Inhalt des Streams.



  • Klasse danke dir!
    Bin noch ein Programmierfrischling und du hast mir sehr geholfen danke!


Log in to reply