TCP-Übertragungen überprüfen

Meldur

Erfahrenes Mitglied
Hallo! Ich versuche mich gerade an einer TCP-Verbindung zwischen zwei Anwendungen. Ich habe einen Server-Listener, der brav neue TCP-Clients empfängt und diese in regelmäßigen Abständen abfragt. Dies geschieht über den TCPClient.WriteByte oder TCPClient.WriteLine-Befehl. Auf der anderen Seite arbeiten TCP-Clients, welche sich mit dem Server verbinden und seine Kommandos bearbeiten, aber auch selbst Anfragen stellen. Das ganze läuft über Threads. Ich versuche damit zu verhindern, dass ein Client eine Anfrage erhält, wärend er noch am senden einer Antwort ist. Allerdings geht diese Komunikation ab und zu aus den Fugen und beide Seiten warten auf Antwort, weil irgendwas verloengegangen ist. Kann ich irgendwie feststellen, ob die Gegenseite die Nachricht bereits empfangen hat?

Gruß und THX, Peter
 

Christian Kusmanow

Erfahrenes Mitglied
Hallo Meldur!
Kann ich irgendwie feststellen, ob die Gegenseite die Nachricht bereits empfangen hat
Indem der Client sie quittiert. ;)
Btw. kannst die Lese-Sende-Anfagen auch asynchron realisieren.
[thread=195268]TCPListener - Formular - Endlosschleife - Thread[/thread]

MfG, cosmo
 

Meldur

Erfahrenes Mitglied
Hi cosmos - danke für den Tip - meine ersten Tests sehen vielversprechend aus, was die asynchrone Kontrolle angeht. Ich bau das mal aus :) - aber ich hab doch noch ne Frage: hast Du vielleicht ne Idee, wie ich den Dateneingang auf einem Client überwache? Bisher mache ich das über eine Endlosschleife, welche permanent den Puffer aller angemeldeten Clients überprüft - nur geht das irgendwann auf die CPU - ein Event wäre sicher besser. Oder?
 
Zuletzt bearbeitet:

Christian Kusmanow

Erfahrenes Mitglied
Meldur hat gesagt.:
hast Du vielleicht ne Idee, wie ich den Dateneingang auf einem Client überwache? Bisher mache ich das über eine Endlosschleife, welche permanent den Puffer aller angemeldeten Clients überprüft - nur geht das irgendwann auf die CPU - ein Event wäre sicher besser. Oder?
Klar doch, es ist auch sinnig da ja etwas nur zu einer best. Zeit passiert.
Also ein Ereignis. ;)
Der Client benachrichtigt dann Server wenn er was bekommen hat.
Löse das Event einfach in der asynchronen Ereignisbehandlung aus. :)

MfG, cosmo
 

Christian Kusmanow

Erfahrenes Mitglied
Ich denke Du brauchst kein Beispiel. Btw. würde ne derartige Demo meinen momentanen
Zeitrahmen sprengen. Und meine eigenen Implementierungen möcht ist jetzt nicht rausholen. ;)

Du möchtes also den Dateieingang auf den Clients überwachen.
Dann melde dem Server den Dateieingang einfach in der asynchronen Ereignisbehandlung
des Clients. Also wenn er was bekommen hat, bestätigt das der Client dem Server.
Kannst ja evtl sowas wie ein Flag (Schalter/Option) in deinem Protokoll bereit stellen,
was eine bestätigung des Dateieingangs erfordert.
Somit kann dein Server festlegen ob Bestätigt werden muss oder nicht.

Du sag mal, kennst Du den Unterschied zwischen TCP und UDP?
Ersteres würde Derartiges gar nicht erfordern. ;)

:google: = http://www.google.de/search?num=20&...+vs+udp+c#&btnG=Suche&meta=lr=lang_de|lang_en

--> http://www.codeproject.com/csharp/testingsocketservers.asp
--> http://www.gamedev.net/community/forums/showfaq.asp?forum_id=15

MfG, cosmo
 

Meldur

Erfahrenes Mitglied
ok - danke erstmal - der Unterschied ist mir schon klar (dachte ich zumindest :)) - aber ich denke mit den Hilfestellungen von dir wird das schon sauber laufen!
 

Neue Beiträge