Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TServerSocket: Außerhalb von ClientRead senden (https://www.delphipraxis.net/113222-tserversocket-ausserhalb-von-clientread-senden.html)

poker1337 4. Mai 2008 21:08


TServerSocket: Außerhalb von ClientRead senden
 
Hallo! :mrgreen:

Ich habe mich gerad "ein wenig" mit der TServerSocket Komponente befasst,
und bin dabei auf ein Problem gestoßen:

Ich habe einen Server und einen Client
Der Client sendet, wenn man auf einen Button drückt die Zahl "1" zum Server und der Server antwortet daraufhin mit "Socket.SendText(blabla)"

Soweit so gut, sendet der Client eine "2" soll der Server eine Prozedur starten die
sehr viele Buchstaben in eine Stringliste schreibt, dass funktioniert auch noch,
doch dann möchte ich bei JEDER 50. generierten Zeile in der Stringliste
die Daten die er bereits generiert hat an den Client zur weiteren Verarbeitung schicken,
dass löse ich wie folgt:
Delphi-Quellcode:
              if (results.Count = 50) then
                Begin
                 form1.Serversocket1.Active := true;
                   while z < 50 do
                     Begin
                      form1.ServerSocket1.Socket.SendText(results[z]);
                      z := z +1;
                     End;
Das Problem was sich hierbei ergibt ist leider für mich nicht leicht zu lösen:
"Windows Socket Fehler: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden istund (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde (10057), bei API 'send'"

Weil ich denke doch das der Socket immer noch offen ist, warum kann ich dann nichts (von dort aus) schicken?
Wie kann ich also von dort aus Sachen verschicken?
oder: Wie sage ich der ServerSocket1ClienRead Prozedur, dass sie halt "form1.ServerSocket1.Socket.SendText(results[z]);"
schicken soll?


Ich habe dann noch eine Frage:
Wenn der Client, sagen wir mal, die Daten verarbeitet hat, wie teile ich dann dem Server mit das er weiter machen soll?


Vielen Dank schonmal,
poker :angel2:

poker1337 5. Mai 2008 14:12

Re: TServerSocket: Außerhalb von ClientRead senden
 
*push* weiß keiner Rat? Ist mein Problem zu ungenau beschrieben oO :gruebel:

Muetze1 5. Mai 2008 15:21

Re: TServerSocket: Außerhalb von ClientRead senden
 
Mit der Suche hättest du dies Problem zu Hauf gefunden. Aber da du ganz faul bist und deine Strafzeit gewartet hast, hier nun die Antwort:

Ein Serversocket verwaltet mehrere Socketverbindungen zu den jeweilige Clients. Der ClientSocket hat nur einen Socket und kann nur eine Verbindung aufbauen (zu einem Serversocket).

Allein diese Aussage sollte bei dir nun die Frage ergeben: an welchen der vielen möglichen Clients sende ich meine Daten bei dem bisherigen Aufruf?

Antwort: an gar keinen. Die Socket Eigenschaft vom TServerSocket bietet dir die Eigenschaften Connections[] und ConnectionCount und darin findest du alle derzeit verbundenen Clients samt deren TCustomWinSocket Instanzen. Dort kannst du dir nun die oder den Client/Socket raussuchen und dann dort jeweils mit SendText(), etc arbeiten.

poker1337 5. Mai 2008 16:49

Re: TServerSocket: Außerhalb von ClientRead senden
 
Ok Danke Meister! :love:
Ich benutze eigentlich immer die Suche nur diesmal hab ich nix gefunden,
naja nix für ungut :firejump: danke trotzdem


Die zweite Frage allerdings ist noch offen :stupid:

Muetze1 5. Mai 2008 17:00

Re: TServerSocket: Außerhalb von ClientRead senden
 
Zitat:

Zitat von poker1337
Ich habe dann noch eine Frage:
Wenn der Client, sagen wir mal, die Daten verarbeitet hat, wie teile ich dann dem Server mit das er weiter machen soll?

Wozu? Der Server kann doch soviel schicken wie er will. Und der Client liest seine benötigten Informationen ein und verarbeitet diese, soweit er alle nötigen Informationen hat. Wenn er mit der Aufgabe fertig ist, kann er die nächsten Daten einlesen für die nächste Aufgabe.

Von daher verstehe ich die Frage nicht.

Aber ansonsten: Lass den Client einfach eine entsprechende Botschaft an den Server senden. Der Socket ist ja keine Einbahnstrasse...


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