AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Server-Client

Ein Thema von ReDoX · begonnen am 17. Sep 2004 · letzter Beitrag vom 16. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
ReDoX
(Gast)

n/a Beiträge
 
#1

Server-Client

  Alt 17. Sep 2004, 06:42
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
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#2

Re: Server-Client

  Alt 17. Sep 2004, 08:18
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...
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: Server-Client

  Alt 17. Sep 2004, 10:01
Hi MrScholz,

erstmal herzlich willkommen in der 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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
ReDoX
(Gast)

n/a Beiträge
 
#4

Re: Server-Client

  Alt 17. Sep 2004, 12:30
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
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Server-Client

  Alt 17. Sep 2004, 12:41
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 )

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Server-Client

  Alt 17. Sep 2004, 13:09
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:

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

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

viel erfolg,
Aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
ReDoX
(Gast)

n/a Beiträge
 
#7

Re: Server-Client

  Alt 17. Sep 2004, 13:10
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
Mfg MrScholz
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: Server-Client

  Alt 17. Sep 2004, 13:12
Hi MrScholz,

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
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
ReDoX
(Gast)

n/a Beiträge
 
#9

Re: Server-Client

  Alt 17. Sep 2004, 13:26
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
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: Server-Client

  Alt 17. Sep 2004, 13:29
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?
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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