![]() |
WSA* Funktionen
hi,
ich habe einige Fragen zu den WSA Funktionen... Bevor man eine Verbindung aufbaut muss man ja WSAStartUp aufrufen und "irgendwann" WSACLeanUp doch habe ich kein plan wie ich das machen soll...sagen wir mal ich habe folgendes:
Delphi-Quellcode:
MyTestConnect ist meine Komponente, connect/disconnect sind ihre methoden.
var
Test1: MyTestConnect; Test2: MyTestConnect; procedure Button1click; begin Test1.connect; end; procedure Button2click; begin Test2.connect; end; procedure Button3click; begin Test1.disconnect; end; procedure Button4click; begin Test2.disconnect; end; Connect ruft "WSAStartUp" auf, disconnect dementsprechen "WSACleanUp".... nun ist das prob wenn ich bei einer der instanzen "disconnect"(WSACleanUp) aufrufe dann werden doch automatisch auch die Verbindungen meiner anderen instanzen beendet oder? |
Re: WSA* Funktionen
Moin!
WSAStartup gibt dir doch eigentlich ein Handle zurück die den Socket eindeutig identifiziert. Wenn du nun dieses handle in der deiner Klasse ablegst und dann beim WSACleanUp wieder angibst, dann hat auch jede Instanz deiner Klasse ein eigenes Handle und somit wird dann auch nur die Verbindung geschlossen. MfG Muetze1 |
Re: WSA* Funktionen
hallo mütze,
genau das ist ja das problem, eben nicht (denke ich) da wird kein handle angegeben, quoote aus dem MSDN: Zitat:
![]() nun steh ich vor einem rätsel :( btw: vielleicht habe ich mich doch falsch ausgedrückt, also WSAStartUp läd ja die ws2_32.dll in den speicher, wsacleanup tut das gegenteil, nur weiss ich nicht wo ich diese funktionen aufrufen sollte. im initialization/finallization-teil der klasse? |
Re: WSA* Funktionen
Moin!
Ja, richtig. WSAStartup und WSACleanup schliessen oder öffnen auch noch keine Verbindungen und daher braucht es kein Handle. Diese beiden Funktionen initialisieren und deinitialisieren das Socket Interface von Windows - also nix grosses, aber z.B. einen Buffer anlegen, die DLLs checken, Registry zu den Protokollen befragen, etc. Diese Funktionen musst du einfach nur aufrufen vor allen anderen bzw. nach allen anderen. Das Handle in dem Sinne musst du ja erst bei WSAConnect() etc. angeben... MfG Muetze1 |
Re: WSA* Funktionen
sollte ich die beiden funktionen dann in den initialization/finallization-teil packen oder wäre es anders besser?
achja, noch eine frage dazu <g> wie vergebe ich innerhalb der klasse ein handle an z.b WSAConnect() ? ich meine jede instanz muss ja ein anderes handle haben, also müssen die namen der handles ja auch anders sein oder? danke für deine antworten btw |
Re: WSA* Funktionen
Moin!
Die TClientSocket / TServerSocket machen das immer beim Create und beim Destroy (WSAStartup/WSACleanup), somit solltest du da keine Probleme haben. Und zu der Frage mit dem Handle: 1. Du bekommst das Handle ja erst beim WSAConnect 2. Wenn du dir eine Variable in deiner Klasse definierst, dann hat jede Instanz der Klasse die du mit Create anlegst für diese Variable ihren eigenen Speicherplatz und somit hat jede Instanz in der gleichen Variablen auch ihr eigenes Handle... Also nix mit eigenem Namen... MfG Muetze1 |
Re: WSA* Funktionen
vielen dank, das hilft mir weiter :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz