Announcement

Collapse
No announcement yet.

Tcp, udp

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tcp, udp

    Hi!<br>
    Also.... ich programmiere zur Zeit mit zwei Freunden eine Client-Server Anwendung, die mit maximal 256 Rechnern klar kommen soll.<br>
    Die Client ist in der Lage den Rechner zu sperren/öffnen und dem Benutzer bestimmte Programme zur Verfügung zu stellen. Der Server übermittelt ihm hierfür, die Listen der Autostarts, Programme und Spiele. Außerdem wird der Preis (es handelt sich um eine Anwendung für Internet Cafés) und die Restzeit (falls Zeitbegrenzung gesetzt wurde) übermittelt.<br>
    Das Problem......die Probleme:<br>
    Wenn ein Rechner abstürzt (z.B.: Sicherung, Powerkabel) kann es vorkommen, dass der Server vom Client (TClientSocket,TServerSocket) keinen Disconnect kriegt und beim nächsten Senden von Daten Windows (nicht das Programm!) Terror macht und uns der Server abschmiert... Lösung: Wir lassen den Client alle 5 sek eine ALIVE-Paket schicken. Wenn der Host keine mehr kriegt schließt er selber die Verbindung. Nachteil: Bei hohem Nettraffik (also wenn viele Rechner die Programmlisten bekommen und schon viele die ALIVE Pakete schicken) gibt es eine so große Verzögerung, dass der Server fälschlicher Weise annimmt der Client sei Tod.<br><br>
    Problem zwei: Ist der Server nicht im Netz (z.B. Reboot) kann der Client nicht connecten (ok, das ist ja auch klar), daher haben wir zuerst den Client angewiesen solange immerwieder zu versuchen eine Verbindung aufzubauen, wie noch keine etabliert ist. Ergebnis: Nach ca. 5 min war der Pufferplatz unter Windows (nicht das Programm, selbst der Internet-Explorer konnte keine Bilder mehr laden...) weg und der Client beschloss sich aufzuhängen. Unsere Maßnahme: Jedesmal wenn ein Verbindungsversuch fehlgeschlagen war wurde der Client geFREEt und neu CREATEt. Folge: Der Puffer lief immer noch über. Unsere Maßnahme: der Server kriegt 'nen ClientSocket und jeder Client 'nen ServerSocket. Nur nach dem Start versucht die jeweilige Seite eine Verbindung zur anderen aufzubauen, da man ja sonst wieder das Pufferproblem hätte... Wenn jetzt aber wegen hohem Nettraffic (der ist eh irgendwie viel zu groß!) wie oben erwähnt die Verbindung zu einem Rechner flöten geht, muss entweder der Client oder Server neu gestartet werden, um die Verbindung wieder herzustellen (was auch komisch ist, wenn das Programm komplett geschlossen wird, dann wird der WindowsPuffer wieder frei, aber nicht wenn die Sockets geFREEt werden).<br><br>
    Letztes Problem:
    Wir haben gestern das neue System auf 18 Rechner aufgespielt. Beim Hochfahren gibt es so viel Nettraffic, dass ständig alle Verbindungen zusammenbrechen und nach ein Paar Minuten der Server und ein paar Clients einfach sterben. Mit 7 Rechnern klappt es (auch ab und zu mal eine Verbindung flöten geht [z.B. wenn der Kunde sich gerade in ein Internetspiel einlogt]), 9 Rechner gingen auch noch, aber der 10 hat es nicht mehr geschafft eine Verbindung zum Server zu etablieren bzw. die Verbindung länger als 10 sek. zu halten.<br><br>
    Um das Problem zu Lösen dachte ich mir, das ich die Alive Pakete mit UDP schicke. Ich habe mir UDP angeguckt und ein Testprogramm geschrieben, mit dem Erfolg das ich einen OLE Fehler beim SendData gekriegt habe... selbst ein Beispiel aus einem sonst sehr guten und verlässlichen Delphi-Buch hat nicht funktioniert... Woran kann das liegen? Muss man das UDP-Protokoll unter Windows extra installieren (ich denke, dass ist im Ethernet treiber mit drin...) oder was?<br>
    Ach ja: Der Server hat gestern noch lustig Fehlermeldungen von ungültigen Zeigeroperationen von sich gegeben. Ich benutze keine Threats, aber ich habe mehrere statische Arrays mit Hilfe von jeweils einem Pointer in den Heap verbannt (sind ziemlich groß...) und die werden sowohl von Timern als auch von Client/Server Events genutzt. Kann es da zu einem Fehler in der Synchronisierung vom Schreiben der Variablen kommen (wie gesagt keine Threads)???<br><br>
    Ich hoffe ihr könnt mir helfen!<br>
    Meine eMail Adresse: [email protected]<br>
    <br>
    MfG<br>
    --Volker Kamin

  • #2
    Doppelt gestellte Frage - Antwort siehe Ordner Netzwerk

    Comment

    Working...
    X