Server-Client (Funktionssprünge)



  • Hallo,
    Da ich derzeit an einem Kommunikationsprotokoll schreibe benötige ich natürlich auch einen Server und Client.
    Mein Server-Client Programm steht soweit, sprich der Client sendet eine Anfrage an den Server, der Server erhält diese, wertet sie auch und gibt die Lösung bei sich aus. Nun möchte ich aber, dass die Lösung an den Client geschickt wird. Dies mache ich wie beim Client to Server nur jetzt umgekehrt. Der Server sendet eine Antwort und der Client nimmt sie an. Soweitso gut. Jetzt habe ich bereits ein sehr gut aufgebautes Programm, will also nicht all zu viel verändern und habe nun dass Problem, dass ich in viele Funktionen verschachtel und die gesamten Eigenschaften zum Versenden, wie Socket sind nicht mehr greifbar. Hier mein Code (verkürzt):

    main(){
    ...
    while (1) {
             newsockfd = accept(sockfd,
                   (struct sockaddr *) &cli_addr, &clilen);
             if (newsockfd < 0)
                 error("ERROR on accept");
             pid = fork();
             if (pid < 0)
                 error("ERROR on fork");
             if (pid == 0)  {
                 close(sockfd);
                 dostuff(newsockfd);
    ...
    }
    void dostuff (int sock)
    {
       int n;
       char buffer[256];
       bzero(buffer,256);
       n = recv(sock, buffer, 255,0);
       //n = read(sock,buffer,255);
       if (n < 0) error("ERROR reading from socket");
       handleMessage(buffer);
    }
     int handleMessage(string buffer){
     ... 
     handleVersion(buffer);
     ...
    }
    int handleVersionJacque(string buffer)
    {
    ...
    Position colour = getCoordinates(cvScalar(H_lower,0,0,0), cvScalar(H_upper,S_upper,V_upper,0));
        stringstream message;
        message << "yourPositionX = "<< colour.x << "\r\nyourPositionY = " << colour.y << "\r\n\r\n";
    
    Jetzt soll message an den Client verschickt werden. nur Derzeit funktioniert es nur, wenn ich in void dostuff einen Text habe und den mit send() verschicke, wie beispielsweise "Protokoll erhalten", wie könnte ich in die Funktion void dostuff zurück um dort send(sock,message,255,0) einzutragen? 
    
    Danke! Ich hoffe ihr blickt da durch.
    


  • Hättest du die Doku zu stringstream richtig gelesen, hättest du gesehen dass str() einen String zurückgibt. Und da du einen String nicht direkt an send übergeben kannst, musst du dessen c_str() Funktion benutzen, die du ja laut deinem anderen Code schon kennst.


Log in to reply