AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi offene tcp/ip verbindungen 'wartend'
Thema durchsuchen
Ansicht
Themen-Optionen

offene tcp/ip verbindungen 'wartend'

Ein Thema von skyphab · begonnen am 16. Apr 2004 · letzter Beitrag vom 16. Apr 2004
Antwort Antwort
skyphab

Registriert seit: 16. Apr 2004
17 Beiträge
 
Delphi 7 Enterprise
 
#1

offene tcp/ip verbindungen 'wartend'

  Alt 16. Apr 2004, 10:26
hallo zusammen!

tolles forum habt ihr hier!
ich habe schon einiges konkretes durch suchen gefunden, aber jetzt muss ich doch mal zwei fragen stellen, an leute mit mehr erfahrung. ich hoffe jemand macht sich die mühe und liest das hier durch

ich schreibe gerade ein programm, dass unter anderem kommunikation mit tcp/ip enthalten sollte. der sinn ist der, dass maschinendaten von einem rechner gesammelt und an mehrere rechner verteilt werden: ein rechner sammelt und gibt an 8 weitere rechner weiter.

die kommunikation will ich mit den 'normalen' tserversocket- und tclientsocket-komponenten von delphi realisiern, was soweit auch gut klappt. wichtig ist in jedem fall, dass die daten ankommen falls eine physikalische verbindung besteht (die eigentlich immer bestehen sollte).

jetzt könnte man das ja auf zwei unterschiedliche arten lösen: einen server, der die maschinendaten empfängt und 8 clients, die sich am server anmelden. der server schickt dann bei stehender verbindung die daten an die clients. das scheint mir recht sauber zu sein, nur falls sich der client nicht am server angemeldet hat, bekommt er keine daten, das stört mich etwas.

andere möglichkeit wäre eine serverkomponente auf den unterschiedlichen rechnern (insgesamt 8 ) und 8 clients (auf einem rechner). das handling ist das etwas unkonfortabler, aber ich könnte explizit verbindungen aufbauen falls sie nicht bestehen und daten vorliegen.

die erste frage: welche version würdet ihr vorziehen? ich habe noch keine erfahrung mit den tcp/ip komponenten

dann noch die zweite frage:
ich könnte die verbindung jeweils aufbauen und stehen lassen. dann hätte ich 8 offene verbindungen, was eine saubere sache wäre. allerdings muss ich mich dann darum kümmern, dass die verbindung auch wirklich steht und ggf. überprüfen ob sie das tut.

was mir besser gefällt ist die methode, die verbindung aufzubauen (client.open) und dann bei onconnect die daten zu schicken und wieder abzubauen (so wie ich's hier im forum gesehen habe). das hat allerdings zur folge, dass ich viele offene verbindungen habe. wenn ich mir netstat anschaue, wird die verbindung nicht synchron wieder abgebaut, sondern bleibt noch eine gewisse zeit bestehen ('wartend'). wenn ich mehrmals pro sekunde daten sende, habe ich so ca. 100 verbindungen offen und das nur für einen rechner. mal 8 wären das um die 800 verbindungen, die zwar geschlossen sind, aber laut netstat den status 'wartend' haben.

ich würde es gerne so machen, aber ist das problematisch? ich habe wie gesagt keine erfahrung damit, nicht dass mir irgendwann das programm zu läuft. es wäre so aber sehr praktisch, weil ich mich nicht um bestehende verbindungen kümmern muss, die evtl. irgendwann abbrechen sondern die verbindung jedesmal neu aufbaue.

habt ihr tipps?
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: offene tcp/ip verbindungen 'wartend'

  Alt 16. Apr 2004, 11:25
zur ersten frage: du brauchst doch keine 8 clients auf einem computer, nur weil du acht server hast! du aknnst dich auch mit einem client zu den acht servern verbinden, und das würde ich auf alle fälle so machen!
  Mit Zitat antworten Zitat
skyphab

Registriert seit: 16. Apr 2004
17 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: offene tcp/ip verbindungen 'wartend'

  Alt 16. Apr 2004, 11:32
Zitat von Meflin:
zur ersten frage: du brauchst doch keine 8 clients auf einem computer, nur weil du acht server hast! du aknnst dich auch mit einem client zu den acht servern verbinden, und das würde ich auf alle fälle so machen!
stimmt, du hast recht wenn ich die verbindung bestehen lasse brauche ich zwar wahrscheinlich 8 clients, bei ständigem auf- und abbau reicht einer. ok danke.

stellt sich nur die frage, ob die vielen ausgehenden 'wartenden' verbindungen ein problemd arstellen, sind sogar schon über 2000 gewesen

/edit/
@Meflin: wie kann ich mit einem client unterschiedliche verbindungen aufbauen? die erste funktioniert, bei der 2. laufe ich auf den üblichen fehler 'asynchroner socket fehler'. die ports am server sind aber beide offen?!

ganz banales beispiel, um zu testen ob es funktioniert. tut es aber leider nicht? wenn ich das so machee wie hier, läuft er im debugging bei prozedurende auf den fehler. wann wird denn das ereignis ausgelöst? er macht dann gar nichts. mist

Code:
Client0.Host := EditIP.Text;
Client0.Port := 25000;
Client0.Open;

Client0.Port := 26000;
Client0.Open;
bei OnConnect des clients jeweils diesen code ausgeführt:

Code:
  Socket.SendText('Client0:' + TimeToStr(Time));
  MemoCLients.lines.Add('Client0:' + TimeToStr(Time));
  socket.Close;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz