![]() |
Nachricht vom Server an alle Clienten schicken
Hi,
ich habe einen Clienten und einen Server auf der gleichen Form plaziert (Server und Client von Indy) Nun habe ich ein Richedit zum Nachricht eingeben und ein weiters zum anzeigen der Nachricht. Nun verbindet sich der eine client zum anderen Server und umgekehrt. Mit zwei compuntern im Lan funzt das. Doch wenn jetzt nich ein dritter hinzukommt, dann gibt es ein problem: Wie erhält der dritte User eine nachricht bzw. zu welchem Server soll dieser User connecten? Nun könnte dieser User doch zu einen x-beliebigen Server connecten.dieser server müsste dann nur die Nachrichten an alle anderen Clienten wieder ausgeben. (oder rede ich jetzt wirres zeug?) Mein Hintergrundgedanke ist es, einen Netzwerkchat zu erstellen, indem es keinen einzelnen Server gibt, d.h. das irgendwo im Netztwerk ein Server läuft, sondern das eigendtlich jeder ein Server ist. Denn wenn es nur einen Server gibt und der auch noch ausfällt, dann kann man den ganzen Chat vergessen. Wie mache ich das nun am günstigsten? Kann mir jemand vielleicht ein paar tips geben wie das am einfachsten zu realisieren ist? thx hibbert |
Re: Nachricht vom Server an alle Clienten schicken
Weshalb machst du in einem Programm Client und Server?
Reicht doch wenn der eine Client zum Server connected und nicht beide untereinander, dann gäbe es auch keine Probleme mit dem dritten Clienten, denn der müsst nur zum Server connecten. |
Re: Nachricht vom Server an alle Clienten schicken
Zitat:
|
Re: Nachricht vom Server an alle Clienten schicken
Wenn du es nur in deinem Netzwerk brauchst dann würde ich es mit UDP Broadcasting machen:
Du musst dich dann nicht mehr um Client Server kümmern sondern kannst dich auf andere Sachen konzentrieren |
Re: Nachricht vom Server an alle Clienten schicken
genau so etwas habe ich gesucht, doch der text wird mir 3 mal angezeigt, wenn ich alleine verbunden bin.
Und was ist bitte UDP Broadcasting ? :shock: thx hibbert |
Re: Nachricht vom Server an alle Clienten schicken
Zitat:
|
Re: Nachricht vom Server an alle Clienten schicken
Die Nachrichten werden nicht an EINEN Client gesendet sondern an ALLE die an dem Netzwerk angeschlossen sind (255.255.255.255).
|
Re: Nachricht vom Server an alle Clienten schicken
Zitat:
|
Re: Nachricht vom Server an alle Clienten schicken
Nimm Broadcasting! ;)
Dann musst du dir darum auch keine Gedanken machen! |
Re: Nachricht vom Server an alle Clienten schicken
Zitat:
|
Re: Nachricht vom Server an alle Clienten schicken
Indy UDPClient (TIdUDPClient)
Indy UDPServer (TIdUDPServer) Und bei dem UDPClient Broadcasting auf true setzen! |
Re: Nachricht vom Server an alle Clienten schicken
ok, danke für eure hilfe, ich werde mich mal gleich ranmachen.
wenn ich noch fargen habe, dann melde ich mich in den nächsten tagen nochmal. danke nochmal für eure hilfe. hibbert |
Re: Nachricht vom Server an alle Clienten schicken
Delphi-Quellcode:
und zum empfangen
IdUDPClient1.Send('255.255.255.255',Portnummer,Text);
Delphi-Quellcode:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle); var x:string; begin AData.Position:=0; SetLength(x,AData.Size); AData.ReadBuffer(x[1],AData.Size); //in x steht jetzt dem empfangene Text end; |
Re: Nachricht vom Server an alle Clienten schicken
ok, nun geht es los mit meinen Fragen:
(ich benutze nun die Kompos Indy UDPClient (TIdUDPClient) & Indy UDPServer (TIdUDPServer) )
Zitat:
(oder darf ich nur den server oder nur den Clienten benutzen, geht beides zusammen überhaupt?)
Code:
Und dann habe ich noch dieses hier:
Im Button ist folgender Quelltext:
procedure TForm1.Button1Click(Sender: TObject); begin IdUDPClient1.Send('255.255.255.255',32,edit1.Text); end;
Code:
Was habe ich falsch gemacht ?
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle); var x:string; begin AData.Position:=0; SetLength(x,AData.Size); AData.ReadBuffer(x[1],AData.Size); memo1.Lines.Add(x) end; thx hibbert |
Re: Nachricht vom Server an alle Clienten schicken
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
type
TIdSocketHandle = THandle; Zitat:
Zitat:
(glaub ich mal) |
Re: Nachricht vom Server an alle Clienten schicken
schön dass du auch den gelcihen fehler hattest :wink:
doch wo hast du das Type eingefügt? etwas so: unit Unit1;
Delphi-Quellcode:
thx hibbert
interface
uses ... type TForm1 = class(TForm) IdUDPClient1: TIdUDPClient; IdUDPServer1: TIdUDPServer; Button1: TButton; Edit1: TEdit; Memo1: TMemo; TIdSocketHandle = THandle; procedure Button1Click(Sender: TObject); procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); ... |
Re: Nachricht vom Server an alle Clienten schicken
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, XPMan; type //<<<<<<<<<<<<<<<<<< TIdSocketHandle = THandle; //<<<<<<<<<<<<<<<<<< type TForm1 = class(TForm) IdUDPClient1: TIdUDPClient; IdUDPServer1: TIdUDPServer; Button1: TButton; Edit1: TEdit; Memo1: TMemo; XPManifest1: TXPManifest; procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} |
Re: Nachricht vom Server an alle Clienten schicken
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mal en kleines Beispiel angehangen
|
Re: Nachricht vom Server an alle Clienten schicken
ach da oben kam das hin :shock:
na dann ist ja der rest auch klar :lol: Danke für deine bzw. eure Hilfe. Aber eine Frage habe ich da noch: warum wird der eingegebene Text 3 mal in das memo geschrieben? (zum Zeitpunkt meines Tests war kein weitere Rechner im Netzwerk online) thx hibbert |
Re: Nachricht vom Server an alle Clienten schicken
Also ich hab kein Problem damit! (Bekomme ihn immer nur einmal)
Wieviele Netzwerkkarten hast du denn in deinem PC??? Und was passiert wenn du es noch auf einem anderen PC laufen lässt??? Bekommt der dann auch alle Nachrichten 3x??? |
Re: Nachricht vom Server an alle Clienten schicken
ok, ich hatte in den netzwerkverbindungen 3 lan verbindungen offen.
nun sind es nur noch 2 (die andere verbindung muss aktiviert sein, damit ich ins internerkomme, obwohl das modem bei mir installiert und eingebaut ist...) aber jetzt kommt auch immer nur eine zeile zurück. cool endlich funzt es, vielen Danke !! ps. funzt das auch über das internet? thx hibbert |
Re: Nachricht vom Server an alle Clienten schicken
Nein leider nicht!
(Wäre aber auf der anderen Seite auch ein bisschen dumm wenn JEDER der ans Internet angeschlossen ist deine Nachrichten empfängt) Die Nachrichten werden sobald sie beim Provider ankommen blockiert und NICHT weitergeleitet! |
Re: Nachricht vom Server an alle Clienten schicken
Wenn du das Ganze allerdings mit Sockets und ohne UDP machen willst, hätt ich hier was für dich:
Delphi-Quellcode:
For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
begin with ServerSocket1.Socket.Connections [I] do //Alle Clients durchgehen if (Connected) then SendText('wasauchimmerduwillst'); |
Re: Nachricht vom Server an alle Clienten schicken
Danke für die antwort, aber ich habe das auch mit den UPD Server und Clienten hinbekommen.
Ich habe einfach einfach eine abfrage vorher eingebaut und dann ging das alles. und die sache mit dem internet funzt auch... thx hibbert |
Re: Nachricht vom Server an alle Clienten schicken
Zitat:
|
Re: Nachricht vom Server an alle Clienten schicken
Ich habe es mit den UPD Komponenten geschafft, aber mit folgenden Einschränkungen:
° User hinter einem Router erreiche ich nicht, die aber mich ° Ich benötige die IP des anderen Users Hibbert |
Re: Nachricht vom Server an alle Clienten schicken
OK! Das ist dann logisch! Ich dachte du würdest es über einen Broadcast schaffen.
|
Re: Nachricht vom Server an alle Clienten schicken
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ja und die Prozedur sendet dann den Text an alle mit dem Server verbundenden Clients?? Kann ich das auch mit TTcpServer / TTcpClient übers INet nutzen? Will mIRC & Co. Konkurrenz machen ^^ thx DymonD PS: Wieso sind bei mir die Buttons grau und rechteckog wie bei W2K obwohl ich XP habe..? |
Re: Nachricht vom Server an alle Clienten schicken
Zitat:
|
Re: Nachricht vom Server an alle Clienten schicken
Ob das Ganze mit TCPServer und -Client geht weiß ich nicht, aber der Text wird dann an jeden einzelnen verbundenen Client geschickt. Musst halt gucken ob's auch mit den oben beschriebenen Kompos geht.
|
Re: Nachricht vom Server an alle Clienten schicken
hi,
meinst du mit {$R WindowsXP.res} oder wie? DymonD |
Re: Nachricht vom Server an alle Clienten schicken
Genau, das meine ich. Natürlich musst du beim Anzeigen auch den neuen XP-Stil eingestellt haben.
|
Re: Nachricht vom Server an alle Clienten schicken
axo..danke
aber wie is das mit den sockets..? DymonD |
Re: Nachricht vom Server an alle Clienten schicken
Was meinst mit
Zitat:
|
Re: Nachricht vom Server an alle Clienten schicken
hi,
ob das auch mit TTcpServer und TTcpClient übers inet funzt bzw ob der server das dann an alle cliens sendet die mit ihm verbunden sind..? For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do begin with ServerSocket1.Socket.Connections [I] do //Alle Clients durchgehen if (Connected) then SendText('wasauchimmerduwillst'); DymonD |
Re: Nachricht vom Server an alle Clienten schicken
Ich hab jetzt auf die Schnelle nix entsperchendes gefunden. Musst halt selber mal suchen. Zur Not kannst du's ja doch mit den Sockets machen.
|
Re: Nachricht vom Server an alle Clienten schicken
ok, thx, ich probiers mal so...
DymonD |
Re: Nachricht vom Server an alle Clienten schicken
Wenn du das mit den UPD Komponenten von Indy machst, geht das noch etwas einfacher:
Delphi-Quellcode:
form1.IdUDPClient1.Send('255.255.255.255',33,'Dein Text');
|
Re: Nachricht vom Server an alle Clienten schicken
Zitat:
ja ich habe aber den TTcpServer / TTcpClient.. muss ich das denn jetzt alles umstellen?? sind die Einstellungen gleich?? und außerdem soll es im INet funzen.. soll ja kein LanMessenger sein und außerdem wieso geht das ned:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin //----------- Den Mist senden -------------- if Form1.TcpClient1.Active then Form1.TcpClient1.SendText(Memo2.Text); end; |
Re: Nachricht vom Server an alle Clienten schicken
Probier mal, das Form1.-Geknör wegzumachen und versuchs mal mit ...Active=true.
Es kann natürlich auch sein, dass er keine Zeilenumbrüche mag, nimm mal ein Edit-Feld. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz