Thema: Delphi Frage zu ScktComp

Einzelnen Beitrag anzeigen

Morlon

Registriert seit: 15. Dez 2004
Ort: Dillingen
38 Beiträge
 
Delphi 7 Professional
 
#1

Frage zu ScktComp

  Alt 7. Jan 2005, 05:28
Hallo,
Ich schreibe gerade an einem kleinen Spiel, dass auch über Netzwerk laufen soll. Dafür hab ich mir die ScktComp genommen und eine Server/Client verbindung aufgebaut. Das klappt bis auf kleine Probleme auch wunderbar. Das größte Problem das ich hab ist allerdings, dass ich vom server aus nix senden kann.

Das ganze sieht so aus: Der User kann einstellen, ob er server oder client ist und kann eine ip-adresse angeben.
Wenn er nun Client ist wird dem Client (Client: TClientSocket) die IP und ein Port zugewiesen und er versucht eine Verbindung aufzubauen. Wenn er Server ist (Server: TServerSocket) wird ihm der Port zugewiesen und er wartet auf den Client.

Sobald die Verbindung steht kann der Client soviel senden wie er mag. Aber wenn ich mit dem Server senden will ( Server.Socket.SendText('string') ) bekomm ich die fehlermeldung, dass der server keine zieladresse hat. Ist ja auch logisch, hab ihm keine Zugewiesen.
Das dumme is nur, ich weiß nich wie ich dem Server die IP zuweis. Beim Client gehts über Client.Host, aber Host kennt mein Server nicht Kann mir da jemand helfen?

Und wenn ich schonmal dabei bin : Ich hab noch 2 Schönheitsfehler, die zwar nicht schlimm sind, aber wenn mir jemand helfen kann wär super.
1.) Wenn der Client vor dem Server versucht eine Verbindung aufzubauen bekomm ich ne Fehlermeldung und der Client bricht ab. Ich hab das gelöst indem ich die Fehlermeldung (10061) abfang, den Client schließe und neu öffne (Client.close; Client.open; ). Gibt es da evtl eine elegantere Lösung? Irgend einen Befehl, mit dem der Client dauerhaft versucht eine Verbindung aufzubauen?
2.) Es gibt einen Trennen-Button um die Verbindung zu schließen. Wenn dieser vom Server gedrückt wird passiert folgendes: Ich schließe den Server (server.active := false) und der client merkt mittels client.ondisconnect, dass kein server mehr da ist und trennt sich ebenfalls.
Wenn nun der Client trennen will schließt er sich mittels client.active := false. der server sollte nun über server.onclientdisconnect merken, dass er sich zu schließen hat und ebenfalls auf active := false gehn.
Irgendwie merkt er auch, dass der Client weg ist, aber ich bekomm eine Fehlermeldung 10038 Zugriffsverletzung bei Adresse...(Speicheradresse). Irgendwie soll das ja nich so sein Ich hab das gelöst indem ich folgendes mach: wenn der client trennen drückt schickt er einen string an den server. dieser wertet diesen aus und weiß nun, dass er sich zu schließen hat.
Das funktioniert zwar, aber ist irgendwie nicht so, wie ichs mir vorgestellt hab Weiß da jemand Rat?


Danke euch schonmal,
Morlon
  Mit Zitat antworten Zitat