tcp kommunikation
-
- Beiträge: 14
- Registriert: 31.01.2004, 10:23
tcp kommunikation
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
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
- Schrompf
- Moderator
- Beiträge: 5161
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: tcp kommunikation
Sobald eine Verbindung steht, kannst Du die ja in beiden Richtungen benutzen. Ich sehe keine Not, da eine weitere Verbindung aufzumachen.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: tcp kommunikation
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).
Du solltest den Socketmodus allerdings auf non-blocking setzen um Daten senden zu koennen waehrend du gleichzeitig auf eintreffende Pakete wartest (bzw. regelmaessig pollst).
-
- Beiträge: 14
- Registriert: 31.01.2004, 10:23
Re: tcp kommunikation
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
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
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: tcp kommunikation
Senden und empfangen in separaten Threads machen.
-
- Beiträge: 14
- Registriert: 31.01.2004, 10:23
Re: tcp kommunikation
Am Client oder am Server??dot hat geschrieben:Senden und empfangen in separaten Threads machen.
Nur was bringt es mir, in seperatren Threads zu machen, wenn ich nur eine Tcp- Verbindung habe?
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: tcp kommunikation
Na wo blockierts denn? Was es dir bringt? Dass es parallel laufen kann...
- Schrompf
- Moderator
- Beiträge: 5161
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: tcp kommunikation
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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
-
- Beiträge: 14
- Registriert: 31.01.2004, 10:23
Re: tcp kommunikation
In meinen Fall bringen mir aber 2 Threads nicht, zur verdeutlichung:
Client will sich am Server einloggen, Client plaudert:
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??
Client will sich am Server einloggen, Client plaudert:
Nun wartet der Client auf eine Antwort, diese könnte wie folgt aussehen:login username password
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 :) ).true
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??
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: tcp kommunikation
Sorg dafür, dass der Client nicht so leicht zu verwirren ist...
Zuletzt geändert von dot am 29.09.2011, 13:38, insgesamt 5-mal geändert.
Re: tcp kommunikation
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.
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.
-
- Beiträge: 14
- Registriert: 31.01.2004, 10:23
Re: tcp kommunikation
Ok, an soetwas habe ich nun auch schon gedacht, werde ich wohl so lösen, danke!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.