Probleme bei Server Client Programmierung



  • Hallo zusammen,

    ich bin gerade dabei mir eine kleine Server-Client Anwendung zu schreiben. Es funktioniert auch schon fast. Ich möchte jetzt noch einfügen, dass man an den Server einen Namen/text schickt und er dazu z.B. eine passende Nummer ausspuckt. Also nachschaut welcher Name das ist und die entsprechende nummer an den client zurückgibt, aber irgendwie komme ich da gar nciht weiter. Wäre toll, wenn mir jemand weiterhelfen könnte oder vielleicht ein paar tutorials hat, die sich damit beschäftigen.
    gruß
    Piet



  • is doch einfach ... du schickst dem server die anfrage mit send() er bekommt die anfrage mit recv() und speichert sie im buffer ... nu musste nur nachschauen was im buffer steht und dementsprechend antworten...

    gruessle TDO



  • Hallo,
    soweit so gut. Ich kann nun Daten hin und her schicken. Wie kann ich denn solange empfangen mit dem Client., bis der Server nix mehr sendet:

    z.B der server will mehrere Daten senden:
    send(...;
    send(..;
    send(..;

    ich empfange mit dem Client mit
    fecv(...;
    wenn ich nun nur einmal recv mache habe ich ja nur das erste send mitbekommen. wie kann ich denn longe abfragen wie was komt, wenn ich z.b nicht weiß, dass der server drei sendet?

    grüße
    piete



  • z.b. mit ner schleife

    while((nbytes = recv(/*irgendwas*/)) > 0)
    {
     if (nbytes == 0)
      printf("client hat disconnected\n");
    
     if(nbytes == -1)
      printf("error\n");
    
     /*Hier irgendwas mim buffer anstellen evl. in nen anderen buffer speichern*/
    
    }
    

    irgendwie so in der art sollte es funktionieren



  • Piete schrieb:

    wenn ich nun nur einmal recv mache habe ich ja nur das erste send mitbekommen.

    Nein. Ich schätze du benutzt TCP/IP. Dort werden die Daten als Stream übertragen. Es kann auch sein, dass du mit einem recv alle drei sends beokmmst. Es kann aber auch sein, dass du fünf recv brauchst, bis du alle Daten hast.



  • Hallo,

    ich nutze TCP/IP. ich habe so gemacht, wie TDo es vorgeschlagen hat. Es funktioniert.

    Danke.



  • @piete ... ich hoffe du hast es aber nicht 1 zu 1 uebernommen mir is aufgefallen das die if statements nie ausgefuert werden da die schleife ja abbricht bevor sie ausgefuehrt werden koennen...

    gruessle TDO



  • Man verwendet für die Kommunikation gerne ein Protokoll, damit man nicht "alles lesen muss was kommt" sondern genau weiss, wann die Nachricht fertig ist.

    Du könntest zB \n als Endzeichen definieren.

    Dann würder der Client zB

    auth\n
    schicken. dann der server:
    who\n
    dann der client:
    name:passwort\n
    und der server dann entweder
    approved\n
    oder
    denied\n

    so könnte eine simple kommunikation aussehen. denn alles lesen bis nichts mehr kommt ist auf dauer unbefriedigend, weil man dadurch keine ordentliche kommunikation machen kann.



  • Hallo,

    die if abfragen hatte ich rausgenommen, da ich ich mir eh nicht so genau erklärenkonnte, was die sollen.


Anmelden zum Antworten