![]() |
Server-Client
Hi ich habe ein Problem ich habe mir eine Server-Client Anwendung geschrieben und nun das Problem ich kan vom Client an den Server einen String schicken mit sendtext aber vom Server an den Client geht das nicht weil ich dem Client keine IP zuweisen kann.
Mfg MrScholz |
Re: Server-Client
Kannst du das mal bitte bißchen genaur beschreiben? Welches Protokoll wird verwendet? Welche Komponenten? Vielleicht ein Code Schnipsel vom senden... sonst können wir nur raten...
|
Re: Server-Client
Hi MrScholz,
erstmal herzlich willkommen in der DP :hi: :dp: Wenn du Serverkomponenten (TServerSocket oder die Indy-Komponenten) verwendest, so musst du dem Client keine IP zuweisen. Sobald sich der Client erfolgreich verbindet, wird ein neues Socket für diesen erstellt. Du musst die Daten einfach mit diesem Socket verschicken. Aber ein bisschen Code bzw. mehr Informationen könnten hier wirklich nicht schaden. Greetz alcaeus |
Re: Server-Client
Erstmal Danke für die Antworten!
Ich benutze ClientSocket & ServerSocket als Komponenten hier etwas Code: Server: procedure TForm1.FormCreate(Sender: TObject); begin ServerSocket.Port := 23; //Festlegung des Ports ServerSocket.active := true; //Aktivierung der ServerSocket end; Client: procedure TForm1.FormCreate(Sender: TObject); begin ClientSocket1.Port := 23; //Festlegung des Ports ClientSocket1.Host := '127.0.0.1'; //IP des Zielrechners ClientSocket1.active := true; //Aufbau der Verbindung end; Client: procedure TForm1.Button1Click(Sender: TObject); begin if ClientSocket1.Active then ClientSocket1.Socket.SendText('Hallo Server'); end; Server: procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add(Socket.ReceiveText); end; So und jetzt möchte ich einen String vom Server an den Client schicken. Und wenn ich das richtig verstehe findet der Server den Client automatisch? Mfg MrScholz |
Re: Server-Client
Hi MrScholz,
bitte verwende die [delphi]-Tags um den Delphi-Code zu formatieren. Weiters kann ich dir ![]() Als Tipp: Sieh dir in der Delphi-OH die Eigenschaften von TServerSocket an, vor allem die Eigenschaft Socket und deren Eigenschaft Connections (ich hoffe du kannst da noch mithalten :stupid:) Greetz alcaeus |
Re: Server-Client
hi,
jedesmal, wenn sich ein client an deinem server anmeldet, wird er zu connections hinzugefügt. über diese kannst du jeden client einzeln ansprechen. besipiel: server gestartet. erster client meldet sich an und bekommt index 0. nachricht vom server zum ersten clienten schicken:
Delphi-Quellcode:
wennsich nun ein neuer client anmeldet, bekommt dieser den nächsten index (1). nachricht an den zweiten:
serversocket1.socket.connections[0].sendtext('na sie!');
Delphi-Quellcode:
du kannst auch ganz leicht eine nachricht an alle gerade verbundenen clients schicken:
serversocket1.socket.connections[1].sendtext('hiho nummer 2');
Delphi-Quellcode:
edit: fehler im code verbessert :oops:
var i: integer;
begin for i:=0 to serversocket1.socket.activeconnections - 1 do serversocket1.socket.connections[i].sendtext('na sie!'); end; viel erfolg, Aenogym |
Re: Server-Client
Habe ich gemacht Danke für das Tutorial und habes jetzt auch geschaft aber jetzt bekomme ich immer den Fehler List Index out of bounds(0) be diesem Code:
Delphi-Quellcode:
Was mache ich falsch :gruebel:
procedure TForm1.Timer1Timer(Sender: TObject);
begin If InternetGetConnectedState(nil, 0) then begin ServerSocket1.Socket.Connections[0].SendText(GetIpAddress); Timer1.Enabled:=false; end; end; function GetIpAddress: string; var phoste: PHostEnt; Buffer: array [0..100] of char; WSAData: TWSADATA; begin result:=''; if WSAStartup($0101, WSAData) <> 0 then exit; GetHostName(Buffer,Sizeof(Buffer)); phoste:=GetHostByName(buffer); if phoste = nil then result:='127.0.0.1' else result:=StrPas(inet_ntoa(PInAddr(phoste^.h_addr_list^)^)); WSACleanup; end; Mfg MrScholz |
Re: Server-Client
Hi MrScholz,
Zitat:
Delphi-Quellcode:
Der Fehler liegt darin, dass der Client höchstwahrscheinlich nicht verbunden ist.
procedure TForm1.Timer1Timer(Sender: TObject);
begin If InternetGetConnectedState(nil, 0) then begin if ServerSocket1.Socket.Connections.Count > 0 then ServerSocket1.Socket.Connections[0].SendText(GetIpAddress); Timer1.Enabled:=false; end; end; ... Greetz alcaeus |
Re: Server-Client
Da bekomme ich immer einen Fehler beim Debbugen :
[Error] Unit1.pas(345): '[' expected but '.' found
Delphi-Quellcode:
Mfg MrScholz
procedure TForm1.Timer1Timer(Sender: TObject);
begin If InternetGetConnectedState(nil, 0) then begin [b]if ServerSocket1.Socket.Connections.Count > 0 then[/b] ServerSocket1.Socket.Connections[0].SendText(GetIpAddress); Timer1.Enabled:=false; end; end; |
Re: Server-Client
:oops: Mein Fehler:
schreib ServerSocket1.Socket.ActiveConnections anstatt dem Connections.Count-Konstrukt. Sorry nochmal Greetz alcaeus PS: bist du dir sicher, dass der Client auch verbunden ist? |
Re: Server-Client
Jo jetzt geht es DANKE.
Zitat:
Mfg MrScholz |
Re: Server-Client
Wie kann ich den Client aktivieren wenn der Server ne message schickt? :gruebel:
Der client ist gestartet und soll nur empfangen können und wenn er etwas empfangen hatt dann auch schreiben. Mfg MrScholz |
Re: Server-Client
Zitat:
Genau meine Frage Ich habe eine Server - Client verbindung. Der Client kann dem Server etwas schicken. Der Server dem client aber nicht. Ich bekomme die fehlermeldung "List index out of Bounds (0)" Der Server kommuniziert so:
Delphi-Quellcode:
Form1.ServerSocket1.Socket.Connections[0].SendText('test SERVER');
was mache ich falsch ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 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