Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Server sendet Daten an Clients (https://www.delphipraxis.net/36548-server-sendet-daten-clients.html)

PierreB 21. Dez 2004 16:10


Server sendet Daten an Clients
 
moin leuts,

ich hab ma wieder ein klitzekleines Problem:

Für die Schule soll ich ein kleines Nachrichtenprogramm schreiben.
D.h. die Clienten connecten einen Server, der dann die Nachrichten an die Clienten
schickt (ähnlich wie ein Chat). Ich habe TServersocket und Tclientsocket genommen.

Mein Problem ist nun:
Die Clienten verbinden sich mit dem Server und können auch Text an den Server schicken.
Mit folgendem Code versuche ich nun das der Server Daten an alle Clienten schickt:
Code:
procedure TForm1.button4click;
var
   text: string;
begin
text := edit1.text;
if Serversocket1.active = true then
Serversocket1.socket.sendtext(xorstring('SERVER: '+text, ''));
end;
(Xorstring ist eine einfache Xor-Verschlüsselung)


Wenn ich nun meinen text senden will, erhalte ich folgende fehlermeldung:
Zitat:

Im Projekt server.. bla bla Exeption...
Eine Aufforderung zum Senden oder Empfangen von Daten wurde verhindert, da der
Socket nicht verbunden ist und (beim senden über einem datagrammsocket mit sendto-Aufruf)
keine Adresse angegen wurde.
Wie der Server ist nicht verbunden ?
Die Clienten sind doch mit dem Server verbunden !


*hilfeeee*

kill -9 21. Dez 2004 20:24

Re: Server sendet Daten an Clients
 
Wenn du von einem ServerSocket an einen (oder mehrere) ClientSocket(s) Text senden willst, musst du angeben an welchen (oder welche). Das tut man üblicherweise mit ServerSocket1.Socket.Connections[*Nr der Connection von 0 an*].SendText(Text);
Also in deinem Fall:

ServerSocket1.Socket.Connections[0].SendText(xorstring('SERVER: '+text, ''));

Wenn du vom Server aus an mehrere Clients auf einmal schicken willst, machst du das einfach mit einer FOR-Schleife...

PierreB 21. Dez 2004 20:31

Re: Server sendet Daten an Clients
 
hi,

dankeschön es funzt jetzt ! ;) (zumindestens an einen Clienten senden)


Wie war das mit der for-Schleife nochmal ? ;)

Ultimator 22. Dez 2004 11:48

Re: Server sendet Daten an Clients
 
Delphi-Quellcode:
ServerSocket1.Socket.Connections[0].SendText(xorstring('SERVER: '+text, ''));
Ersetz die 0 in der eckigen Klammer duch ein i (integer) und lasse den Code in einer Schleife von 0 bis ServerSocket1.Socket.ActiveConnections -1 ausführen ;-)

PierreB 22. Dez 2004 16:18

Re: Server sendet Daten an Clients
 
Zitat:

von 0 bis ServerSocket1.Socket.ActiveConnections -1 ausführen
wieso von 0 bis -1?

also so ? (ich kann es heute leider nicht selbst ausprobieren weil mein "delphi-pc" in der "werkstatt" ist.

Zitat:

For i:=0 to -1 do
ServerSocket1.Socket.Connections[i].SendText(xorstring('SERVER: '+text, ''));

P.S.: Ich hasse for-Schleifen, nix geht über eine gute if..then..else-schleife ! ;)

jim_raynor 22. Dez 2004 16:36

Re: Server sendet Daten an Clients
 
Zitat:

Zitat von delphman
Zitat:

von 0 bis ServerSocket1.Socket.ActiveConnections -1 ausführen
wieso von 0 bis -1?

da steht ServerSocket1.Socket.ActiveConnections-1. Nur bis -1 macht die Schleife doch keinen Sinn. und von 0 weil die Indizierung von Arrays bei Delphi bei 0 beginnt.

PierreB 22. Dez 2004 16:42

Re: Server sendet Daten an Clients
 
tut mir leid aber ich raff das nicht ! :wall:

Zitat:

Nur bis -1 macht die Schleife doch keinen Sinn.
bis wohin dann?

oder muss ich erst mit serversocket.socket.activeconnections herausfinden wieviel verbinden existieren und diese zahl dann bei i eintragen ??

hab das noch grad gefunden, stimmt das ?
Code:
for i := 0 to Server.Socket.ActiveConnections - 1 do
begin
Server.Socket.Connections[i].SendText('Irgendwas')
end;

Aenogym 22. Dez 2004 16:53

Re: Server sendet Daten an Clients
 
hi delphman.

serversocket1.socket.activeconnections liefert dir ja zurück, wieviele clients verbunden sind. weil du aber bei 0 anfängst, ist der letzte client dann serversocket1.socket.activeconnections - 1 (das ist wie bei deinem alter. wenn du jetzt 15 jahre alt bist, läuft dein sechzehntes lebensjahr ;) ).

ergo:

Delphi-Quellcode:
for i:=0 to serversocket1.socket.activeconnections - 1 do
  serversocket1.socket.connections[i].sendtext('hallo');
Aenogym

edit: an siehste, hasstes ja allein geschafft :thumb:


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