Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sockets bei D6 sind nicht die gleichen wie bei D7 (https://www.delphipraxis.net/75989-sockets-bei-d6-sind-nicht-die-gleichen-wie-bei-d7.html)

Corelgott 28. Aug 2006 11:40


Sockets bei D6 sind nicht die gleichen wie bei D7
 
Hi @ all,

ich habe bei einem meiner Programme einen sehr seltsamen Effekt...
Und zwar ist die Software unter D6 entstanden.
Nun haben wir unsere Umgebung auf D7 protiert. (@ warum D7 und nicht 2005/06? Ist ne lange geschichte... Don't ask ^^)

Das dumme ist nun, das ich wenn ich mein Kommunikations-Test programm starte seltsames verhalten sehe. Wie z.b. das sich auf einmal nur noch ein Client-Socket kommunizieren kann. (In D6 ging es tadellos mit über 20 stk in einer App) Unter D7 kann nur der Client, der sich als erster zum server verbunden hat senden bzw. empfangen, obwohl alle Clients beim server im Log als verbunden gelten.

Wenn ich eine kleine Test-App baue um die Kommunikation zu testen geht es unter D6 tadellos... (eine App; 1 TServerSocket; 2 TClientSocket)
Delphi kann die in D6 komplett sauber unterscheiden und funzt wunderbar (** speicheradressen verglichen)
Genau die Gleiche App unter d7 schmeisst exceptions noch und nöcher, dass der Port nur einmal geöffnet werden kann

Interressanter weise musste ich insgesammt feststellen, dass:
Die Komponente, die ich unter D6 genutzt habe (Kompo zur Runtime erstellt) unter D7 nicht mehr als Kompo registiert ist.
Wenn ich habe die Unit per Hand in die uses schreibe, kann ich meine App wunderbar kompilieren (verständlich, da ich die kompos ja eb zur laufzeig erstelle)

Ich vermute nun, dass die Unit ScktComp sich bei D6 und D7 unterscheidet und nicht abwärtskompatibel ist vom verhalten her.

Des weiteren scheinen die Komponenten TServerSocket und TClientSocket bei D7 herrausgenommen bzw. Durch neue Komponenten ersetzt worden zu sein.

Kann jemand von euch das bestätigen? Kenn jemand eine Lösung für das problem? Ich würde ungern die komplette Kommunikation neu schreiben müssen, weil D7 da nur das neuere kann...

Vielen dank im Voraus

cya
Corelgott

Corelgott 28. Aug 2006 12:03

Re: Sockets bei D6 sind nicht die gleichen wie bei D7
 
ok mal ein update in eigener sache...

anscheinend ist es eher ein problem, dass die sockets zur laufzeit erstellt werden.

Dieses Problem habe ich vermutlich vorher nicht gehabt, da ich den socket selbst in einer Komponente eingesetzt habe...

Also folgender Fall:

Eine D6-App

1 TServerSocket zur Laufzeit; Port 123
2 TClientSocket zur Laufzeit; Port 123

Bei TClient.Active := true kommt eine Exception

1 TServerSocket zur Entwurfszeit; Port 124
2 TCleintSocket zur Entwurfszeit; Port 124

Beim TClient.Active := true ist alles in bester Ordnung und die Sockets verhalten sich so wie ich mir das wünschen...

??

Vorschläge?

thx im Voraus

cya
Corelgott

idontwantaname 28. Aug 2006 12:05

Re: Sockets bei D6 sind nicht die gleichen wie bei D7
 
Hast du schon mal überprüft, ob der Port 123 überhaupt frei ist ??

SirThornberry 28. Aug 2006 12:17

Re: Sockets bei D6 sind nicht die gleichen wie bei D7
 
Das die Sockets sei D7 nicht mehr in der Komponentenpalette sind ist bekannt. Das Package ist in D7 jedoch noch vorhanden so das du es nur installieren brauchst.
Hingegen vieler Vermutungen sind die Sockets aber nicht depricated sondern vermutlich von der Palette verschwunden weil die Indy-Komponenten dazu gekommen sind. Selbst bei D2006 sind die Sockets noch vorhanden und nicht als depricated markiert.

Dein Vergleich mit dem erzeugen zur Laufzeit hingegen dem zur Designzeit hinkt gewaltig. Wenn dann solltest du in beiden fällen den gleichen Port nutzen. Hast du ein eigenes Protokoll geschrieben oder verwendest du das NTP auf dem Port 123? Wenn du ein eigenes Protokoll hast nimm einen Port der nicht für andere Dienste reserviert ist.

Corelgott 28. Aug 2006 12:27

Re: Sockets bei D6 sind nicht die gleichen wie bei D7
 
hi
in bezug auf port 123 war nur ein bsp...
Normalerweise wird port 900 bzw. 901 benutzt... und ja die sind frei... (thx ^^)

Hmm wieso hinkt mein test mit runtime & designtime? selbst wenn ich die ports wechsle habe ich damit probleme..
Es gibt btw. auch probleme wenn ich nur einen der beiden server nutzen und alle 4 Clients daruf verbinden lasse.

In welchem pack sind die Socket-Komopos unter D7? Hast du da ne idee? ich habe eben schon mal geschaut, aber die Register-Routine für die Kompos nicht gefunden... weiss du das aus dem Ärmel?

cya
Corelgott

Balu der Bär 28. Aug 2006 12:33

Re: Sockets bei D6 sind nicht die gleichen wie bei D7
 
Ein gewisser PierreB hat dazu hier eine kleine Anleitung geschrieben, in deinem Fall (Delphi 7) musst du aber die "dclsockets70.bpl" auswählen. :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 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