Autor Beitrag
Sued
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 23.10.02 18:21 
Also, ich hab folgendes Problem:

Client/Server Chat-programm;
Der Server hat ein array wo die ip's aller clients drinstehen;
Jetzt will ich eine MSG an alle Clients schreiben(von OnClientRead aus).
Habs bisher so gemacht:

procedure OnClientRead
begin

for a:=1 to 20 do
begin
clientsocket1.socket.active:=false;
clientsocket1.address:=client[a].ip;
clientsocket1.socket.active:=true;
end;
end;

und dann:

OnClientConnect;
begin
Sendtext(xxxxxxxxxxxxxxxxx)
end;

Hoff das ist verständlich.

Das Problem ist,daß immer zuerst die ganze OnClientRead procedure
abgearbeitet wird und dann an die letzte Adresse alle msgs geschickt werden.

Habs auch schon mit close statt 'clientsocket1.socket.active:=false;'
und so probiert.

Wär cool wenn mir jemand weiter helfen könnte.

THANX
Sued
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Mi 23.10.02 20:10 
Wenn das OnClientRead-Event aufgerufen wird, ist OnClientConnect schon längst aufgerufen worden. Also müsste dein Problem gelöst sein, wenn du SendText('xxxxx') einfach hinter ... .active := true setzt. Musst du mal ausprobieren, sitze im Moment nicht vor meinem PC ums nachzuprüfen.

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
Jebaz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win NT 4, Win XP, Linux
Delphi 7.0
BeitragVerfasst: Sa 26.10.02 00:02 
Titel: erst mal von vorn....
hallo erst mal....ich bin ebenfalls seit einer woche an einem, bzw. mehreren chat-programmen...ich habs schon mit allem versucht, die "normalen" server/client-sockets und tcp-server/client komponenten aus dem Register Internet, und die Indy-Komponenten. Nun, mit Indy hab ichs soweit mal hingekriegt, nur hab ich dort keinen schimmer, wie ich jede Message eines Clients, an alle anderen verbundenen Clients zurücksenden kann.... da hab ich gedacht, ich greif auf die einfacheren server/client-sockets zurück, dessen propertys und functions doch um einiges einfacher aussehen....nur hab ich beim server-socket keine chance, die ip-addresse festzulegen!!! ich hab schon alles versucht, bin am verzweifeln....denn ohne sie festzulegen, hat der server immer den localhost...was mir einen dreck bringt, denn so kann ich nur auf meinem system hin und her chatten...währe echt nett, wenn mir das jemand sagen könnte, ich weiss,dass das irgendwie gehen muss!! ;-)
Sued Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 29.10.02 00:03 
Sorry das ich jetzt erst wieder da bin, hab bei mir daheim probleme mitm Internet.

Also.OnClientConnect wurde natürlich schonmal aufgerufen,müßte doch aber bei jedem .....activate wieder aufgerufen werden.will ja nicht nur an den einen client schreiben,von dem OnClientRead ausgelößt wurde, sondern auch an alle anderen.
Sendtext kann ich aus irgendeinem Grund nicht in der selben procedure
ausführen,in der ich auch connecte. Frühestens in OnConnect,glaub ich.

Thanx

Sued
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Do 31.10.02 16:05 
Ach, verdammter Mist, hab total Müll gelabert. Klar kann es nach meiner Beschreibung nicht funktionieren, da der Client ja noch nicht Verbunden ist. Dein Problem mit den Sockets zu handhaben wäre nämlich sehr umständlich.

Anders als bei UDP können mit TCP keine Daten verschickt werden, bevor eine Verbindung aufgebaut wurde. UDP ist ein s.g. "verbindungslosen Protokoll". Also würde ich UDP für deine Zwecke empfehlen und dann in einer Schleife die Daten schicken (nimm z.B. die Indy Komponente).

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...