tcp kommunikation

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
DBGTMaster
Beiträge: 14
Registriert: 31.01.2004, 10:23

tcp kommunikation

Beitrag 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
Benutzeravatar
Schrompf
Moderator
Beiträge: 4886
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: tcp kommunikation

Beitrag von Schrompf »

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.
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: tcp kommunikation

Beitrag 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).
DBGTMaster
Beiträge: 14
Registriert: 31.01.2004, 10:23

Re: tcp kommunikation

Beitrag 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
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: tcp kommunikation

Beitrag von dot »

Senden und empfangen in separaten Threads machen.
DBGTMaster
Beiträge: 14
Registriert: 31.01.2004, 10:23

Re: tcp kommunikation

Beitrag 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?
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: tcp kommunikation

Beitrag von dot »

Na wo blockierts denn? Was es dir bringt? Dass es parallel laufen kann...
Benutzeravatar
Schrompf
Moderator
Beiträge: 4886
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: tcp kommunikation

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
DBGTMaster
Beiträge: 14
Registriert: 31.01.2004, 10:23

Re: tcp kommunikation

Beitrag 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??
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: tcp kommunikation

Beitrag von dot »

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.
joggel

Re: tcp kommunikation

Beitrag 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.
DBGTMaster
Beiträge: 14
Registriert: 31.01.2004, 10:23

Re: tcp kommunikation

Beitrag 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!
Antworten