Seite 1 von 1

tcp kommunikation

Verfasst: 29.09.2011, 10:31
von DBGTMaster
Hallo,

nehmen wir an, ich habe eine Anwendung, in welcher:

1.) Der Client mit dem Server kommuniziert (Benutzer klickt auf Button, Client holt vom Server die anzuzeigenden Button)
2.) Der Server auch mit dem Client kommuniziert (Server teilt Client mit, dass ein neuer Ordner von einem anderen Benutzer angelegt wurde)

Baue ich in solch einem Fall 2 Tcp Verbindungen auf, oder wie löse ich solches am besten?

lG

Re: tcp kommunikation

Verfasst: 29.09.2011, 10:53
von Schrompf
Sobald eine Verbindung steht, kannst Du die ja in beiden Richtungen benutzen. Ich sehe keine Not, da eine weitere Verbindung aufzumachen.

Re: tcp kommunikation

Verfasst: 29.09.2011, 12:13
von Aramis
TCP ist vollduplex, also besteht wirklich kein Grund fuer eine zweite Verbindung.

Du solltest den Socketmodus allerdings auf non-blocking setzen um Daten senden zu koennen waehrend du gleichzeitig auf eintreffende Pakete wartest (bzw. regelmaessig pollst).

Re: tcp kommunikation

Verfasst: 29.09.2011, 13:08
von DBGTMaster
Hallo,

Kommunikation läuft so ab:

client sendet daten, server arbeitet diese ab und sendet eine Antwort zum Client zurück. Das abarbeiten selber kann schonmal ~10 sekunden dauern (je nach Fall).

Möchte ich nun zu einen Zeitpunkt, dass der Server eine bestimmte Nachricht an alle Clients sendet, so habe ich das Problem, dass, wenn ein Client gerade auf eine Antwort seiner Anfrage wartet, ich warten muss, bis diese Anfrage abgearbeitet wurde, da der Client ja sonst etwas anderes erhält, als erwartet.

Hab ich jetzt alle verwirrt :D?

Was tuh ich in solch nen Fall?

lG

Re: tcp kommunikation

Verfasst: 29.09.2011, 13:10
von dot
Senden und empfangen in separaten Threads machen.

Re: tcp kommunikation

Verfasst: 29.09.2011, 13:16
von DBGTMaster
dot hat geschrieben:Senden und empfangen in separaten Threads machen.
Am Client oder am Server??

Nur was bringt es mir, in seperatren Threads zu machen, wenn ich nur eine Tcp- Verbindung habe?

Re: tcp kommunikation

Verfasst: 29.09.2011, 13:22
von dot
Na wo blockierts denn? Was es dir bringt? Dass es parallel laufen kann...

Re: tcp kommunikation

Verfasst: 29.09.2011, 13:25
von Schrompf
Zur Klarheit: nur Dein Programm blockiert bei dem Funktionsaufruf. Dem TCP-Socket selbst ist das aber wurscht. Du kannst mit zwei getrennten Threads (oder mit Konfiguration zu nicht-blockierend) auf dem selben Socket gleichzeitig lesen und schreiben.

Re: tcp kommunikation

Verfasst: 29.09.2011, 13:32
von DBGTMaster
In meinen Fall bringen mir aber 2 Threads nicht, zur verdeutlichung:

Client will sich am Server einloggen, Client plaudert:
login username password
Nun wartet der Client auf eine Antwort, diese könnte wie folgt aussehen:
true
Nehmen wir nun an, der Vorgang, bis der Server sendet, ob true oder false, dauert 20 Sekunden (ja, ich weiß, klingt unrealistisch, ist ja nur ein Beispiel :) ).

In der Zeit, wo nun gewartet wird, will der Server eine Nachricht an allen Clients senden. Das kann ich nun auch problemlos tun, aber Problem ist, dass der Client seine nicht erwartete Antwort des Logins bekommt, sondern etwas anderes, und der Client dann etwas verwirrt ist...

Da ist nun die Frage, wie löse ich das am besten??

Re: tcp kommunikation

Verfasst: 29.09.2011, 13:36
von dot
Sorg dafür, dass der Client nicht so leicht zu verwirren ist...

Re: tcp kommunikation

Verfasst: 29.09.2011, 13:37
von joggel
Wenn ich das richtig verstanden habe:
Hast Du Einfluss was der Server sendet?
Wenn nein... problem.
Wenn ja, packe beim Senden eine ID zur Nachricht mit dazu, damit du beim Client auf versichiedene IDs unterschieldich reagieren kannst.

Re: tcp kommunikation

Verfasst: 29.09.2011, 13:39
von DBGTMaster
joggel hat geschrieben:Wenn ich das richtig verstanden habe:
Hast Du Einfluss was der Server sendet?
Wenn nein... problem.
Wenn ja, packe beim Senden eine ID zur Nachricht mit dazu, damit du beim Client auf versichiedene IDs unterschieldich reagieren kannst.
Ok, an soetwas habe ich nun auch schon gedacht, werde ich wohl so lösen, danke!