Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Server-Client (https://www.delphipraxis.net/29947-server-client.html)

ReDoX 17. Sep 2004 06:42


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

fiasko 17. Sep 2004 08:18

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...

alcaeus 17. Sep 2004 10:01

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

ReDoX 17. Sep 2004 12:30

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

alcaeus 17. Sep 2004 12:41

Re: Server-Client
 
Hi MrScholz,

bitte verwende die [delphi]-Tags um den Delphi-Code zu formatieren.

Weiters kann ich dir dieses Tutorial empfehlen, da wird mit Server- und Clientsockets gearbeitet. Falls du anschließend immer noch Probleme mit den Sockets hast, beantworten wir die Fragen gerne.
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

Aenogym 17. Sep 2004 13:09

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:
serversocket1.socket.connections[0].sendtext('na sie!');
wennsich nun ein neuer client anmeldet, bekommt dieser den nächsten index (1). nachricht an den zweiten:

Delphi-Quellcode:
serversocket1.socket.connections[1].sendtext('hiho nummer 2');
du kannst auch ganz leicht eine nachricht an alle gerade verbundenen clients schicken:

Delphi-Quellcode:
var i: integer;
begin
  for i:=0 to serversocket1.socket.activeconnections - 1 do
    serversocket1.socket.connections[i].sendtext('na sie!');
end;
edit: fehler im code verbessert :oops:

viel erfolg,
Aenogym

ReDoX 17. Sep 2004 13:10

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:
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;
Was mache ich falsch :gruebel:
Mfg MrScholz

alcaeus 17. Sep 2004 13:12

Re: Server-Client
 
Hi MrScholz,

Zitat:

Zitat von MrScholz
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If InternetGetConnectedState(nil, 0) then
begin
ServerSocket1.Socket.Connections[0].SendText(GetIpAddress);
Timer1.Enabled:=false;
end;
end;
...
Was mache ich falsch :gruebel:
Mfg MrScholz

Schreib die Prozedur mal so:
Delphi-Quellcode:
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;
...
Der Fehler liegt darin, dass der Client höchstwahrscheinlich nicht verbunden ist.

Greetz
alcaeus

ReDoX 17. Sep 2004 13:26

Re: Server-Client
 
Da bekomme ich immer einen Fehler beim Debbugen :
[Error] Unit1.pas(345): '[' expected but '.' found

Delphi-Quellcode:
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;
Mfg MrScholz

alcaeus 17. Sep 2004 13:29

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.
Seite 1 von 2  1 2      

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