Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Server.Socket.SendText - Socket.SendText - Unterschied? (https://www.delphipraxis.net/132437-server-socket-sendtext-socket-sendtext-unterschied.html)

Felix015 12. Apr 2009 18:28


Server.Socket.SendText - Socket.SendText - Unterschied?
 
Also ich bin bei einem Chatprogramm dran, wo man selbst Server erstellen kann und sich dann mit Servern verbinden kann. Verfügbare Server werden dabei auf einem FTP-Server gespeichert, aber das ist nicht so wichtig.
Das Chatprogramm funktioniert auch soweit, bis auf eine Kleinigkeit. Ich habe einmal ein Ereignis in ServerClientRead und einmal ein Ereignis im OnkeyDown des Editfeldes wo die Nachrichten eingegeben werden. In beiden Ereignissen taucht fast die selbe Zeile.
Im ServerClientRead Ereignis:
Delphi-Quellcode:
for i := 1 to server.Socket.ActiveConnections-1 do Socket.SendText(messages);
Das funktioniert auch ohne Probleme, der Server empfängt Text und schickt diesen an alle Clients weiter.
Wenn allerdings der Server etwas schreibt, dann wird diese Zeile im OnKeyDown aufgerufen:
Delphi-Quellcode:
for i := 1 to server.Socket.ActiveConnections-1 do server.Socket.SendText(messages); //Server = ServerSocket
Es ist also nur das "Server. ..." hinzugekommen, lasse ich das weg, meckert delphi das er SendText nicht kennt. Steht es da wird das prog zwar kompiliert, jedoch kommt immer wenn der Server etwas schreiben will eine exception:

"Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und keine Addresse angegeben wurde."

Nach meiner Logik muss also im OnKeyDown dass "Server" weg, aber dann meckert delphi...

Was muss ich machen??

Mfg Felix

quendolineDD 12. Apr 2009 19:52

Re: Server.Socket.SendText - Socket.SendText - Unterschied?
 
Ehrlich gesagt widerfährt mir jedwede Logik von dir. Der Fehler ist doch eindeutig, warum eine AV auftritt. Wenn keine Verbindung besteht, kann auch nicht gesendet werden.

craash 12. Apr 2009 20:02

Re: Server.Socket.SendText - Socket.SendText - Unterschied?
 
du musst natürlich auch angeben an wen du senden möchtest.

in
Delphi-Quellcode:
server.socket.sendtext('deintext')
allein ist ja nicht angegeben an wen du senden willst. je nachdem was du machen willst wäre zB
Delphi-Quellcode:
for i:=0 to server.socket.activeconnections-1 do server.socket.connections[i].sendtext('deintext')
eine möglichkeit an alle verbundenen clients zu senden.

korrigiert mich bitte jemand wenn ich da falsch liege aber nur via socket.sendtext() funktioniert nur im OnConnect-/OnRead/etc- Ereignis, da hier eindeutig der zuvor agierende client das ziel ist.


mfg

Felix015 12. Apr 2009 21:47

Re: Server.Socket.SendText - Socket.SendText - Unterschied?
 
Ok ich bedanke mich vielmals.

craash's Lösung hat bei mir funktioniert, dankeschön dafür.

Ich hatte gedacht, dass der immer die socketverbindungen immer hochzählt und dann einfach in den gerade angewählten Socket reinschreibt und dass beim entsprechenden Clienten so ankommt.

Also dankeschön nocheinmal :D

Mfg Felix


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