Problem mit Client/Server, mehrere Anfragen an Server hintereinander geht nicht
-
Hallo,
das mit dem fork funktioniert nur unter unix soweit ich weiß. ich programmiere unter windowsmit visual studio.
gibts da auch was?gruß
-
eigtl. ist es nicht nötig mehrere prozesse aufzumachen, wenn du sowieso wenig kaurze anfragen hast, die nacheinander bearbeitet werden.
wird er client jedesmal neu gestartet, oder kann der fehler auch da liegen?
ansonsten gib doch mal eine mledung aus, wenn der socket ordentlich geschlossen wird, und schau ob dass passiert. außerdem könntest du jedesmal meldungen ausgeben, wenn eine anfrage ankommt und beendet ist, um zu sehen wo's hängt.kenn mich nur mit unix sockets aus, aber sollte net viel anders sein.
-
Hallo,
ich habe jetzt noch eine Weile experimentiert. Ich bekomme es aber einfach nicht hin. Der Client wird nicht jedes mal neu gestartet. ICh starte den Client, der meldet sich beim Server an, bekomt eine Bestätigung, dann startet der Client eine Userabfrage, der User gibt was ein, das wird an den Server gesendet und der gibt Antwort, die auf dem Bildschirm ausgegeben wird. Dann wird wieder die Userabfrage angezeigt, der User soll was eingeben usw. Das funktioniert auch, nur der Server gibt keine Antwort.
Gruß
-
Hallo,
ich denke, dass es am Client liegt. Beim Server lasse ich nun das, was er sendet, sofort ausgeben, nachdem er gesendet hat. Das dürfte also gehen, also der Server dürfte also gesendet haben, auch bei der zweiten oder dritten Abfrage.
Beim Client höre ich auf den Server mit der folgenden Schleife:----Userabfrage--- send(sock, name, sizeof(name), 0); printf("\Antw.:\n\n"); while((nbytes = recv(sock, buf, sizeof(buf), 0)) > 0) { if(nbytes == -1) printf("error\n"); printf("%s\n", buf); }
Bei der zweiten Abfrage springt der gar nicht mehr in die while Schleife, das habe ich mit einer Ausgabe getestet, der überspringt sie einfach.
Gruß
-
Anfänger_ schrieb:
Das funktioniert auch, nur der Server gibt keine Antwort.
Starte den Server im Debugger und gehe schrittweise durch die Anweisungen.
-
Hallo,
der Code bei meinem Server sieht so aus:
if (listen(sock, 5) == SOCKET_ERROR) bye("listening"); //con ist die anzahl der clients while (c< con) { c++; SOCKET s = accept(sock, &ca, &lca); if (s == INVALID_SOCKET) bye("accepting"); printf("\nClient (%i) connected...", c); send(s, buf, sizeof(buf), 0); char buffy[20]; recv(s, buffy, sizeof(buffy), 0); printf("\n\nClient (%i): Anfrage'%s'.",c ,buffy); for (ii= 0; ii<=9; ii++) { char kpl[256]; if (strcmp(Liste[ii].name, buffy) == 0) { strcpy (kpl, "Die Nr. von '"); strcat (kpl, buffy); strcat (kpl, "' lautet: "); strcat (kpl, Liste[ii].matnr); strcat (kpl, "\n\n MfG \n Ihr Server"); send(s, kpl, sizeof(kpl), 0); printf("\n Die Nr. lautet: %s",Liste[ii].matnr); break; } if (ii == 9) { char kpl[256]; strcpy (kpl, "Folgende Daten sind angekommen: '"); strcat (kpl, buffy); strcat (kpl, "'\nDer Name wurde in der Datenbank nicht gefunden!" ); strcat (kpl, "\n\n MfG\n Ihr Server"); send(s, kpl, sizeof(kpl), 0); printf("\n Es wurde kein passender Eintrag in der Datenbank gefunden!"); } } //if (closesocket(s) == SOCKET_ERROR) bye("closing last connection"); }
Wenn ich if( closesocket... rausnehme, dann bleibt der Client hängen. wenn ich es rein mache, dann kann ich keine zweite anfrage stellen.
Komme da irgendwie nciht weiter.
Gruß
-
Ich würde dir empfehlen, zunächst deinen Server zu testen, bis er sicher läuft, dann erst am Client was zu ändern. Um den Server fit zu machen, solltest du mal telnet als Client nehmen, dass Programm funktioniert nämlich sicher
Dazu musst du es in Windows sowie Linux folendermaßen aufrufen "telnet SERVERIP SERVERPORT" eigtl. ganz einfach. dann kannst sehen was der Server antwortet, und du kannst was hinschicken. Einfach mal den Server laufenlassen, und ein paar Telnet Sitzungen hintereinander starten. dann ist zumindest schon mal klar, ob der Server auf mehrere Anfragen reagiert, oder ob dein Client sie einfach falsch stellt.
Hab jetzt wenig Zeit, aber schau mir heute Abend auch nochmla deinen Code an, ob ich was entdecke.
-
Hallo,
ich habe das mal mit telnet getestet. der Server macht irgendwie murx. Wenn ich telnet starte, bekomme ich die erwartete Meldung vom Server, dass er auf "Input" wartet. Wenn ich dann was schicke, sendet er was zurück und dann erscheint, "Verbindung zu HOst verloren". Wenn ich telnet 2 mal starte, bekomme ich beim ersten die MEldung, dass der Server auf Input wartet und beim zweiten nix. Wenn ich dann mit dem ersten was sende, erhalte ich am ende ja wieder "Verbindung zu HOst verloren" und dann hae ich im zweiten telnet Fenster die Meldung, dass der Server auf Input wartet. Der Server scheint also nicht wirklich zu funzen.
Gruß
-
verbindung zu host verloren is an sich schon ok, des schreibt telnet immer wenn die verbindung beendet is. solltest schaun ob der datenaustausch wie erwartet läuft
-
Hallo,
ich habe es jetzt soweit am Laufen. ICh beende nach jeder Abfrage die Verbindung und melde mich als neuer Client an das geht fürs erste. Wenn ich mal mehr ZEit habe, werde ich mal versuchen das so hinzubekommen, dass ich mehrere Anfragen senden kann, auch ohne, dass ich mcih immer neu anmelde.
Vielen Dank.
Gruß