AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi verbindung weiterleiten
Thema durchsuchen
Ansicht
Themen-Optionen

verbindung weiterleiten

Ein Thema von gandime · begonnen am 6. Mär 2008 · letzter Beitrag vom 13. Mär 2008
Antwort Antwort
gandime
(Gast)

n/a Beiträge
 
#1

verbindung weiterleiten

  Alt 6. Mär 2008, 20:37
Hi,
ich möchte eine Verbindung weiterleiten und ich hab mir das so gedacht:
Din serversocket bekommt eine Verbindung.
danach werden alle Verbindungen die der Server erhält an den Clienten weitergeleitet, welcher dann zu einem anderen Server connected.
Die daten die der client erhält werden zum serversocket zurückgeschickt und dann halt zu der Verbindung geschickt.
Hab das mal versucht zu realisieren:
Delphi-Quellcode:
procedure write(p_test:pansichar);
var
  i:integer;
begin
  for i:=0 to form1.ServerSocket1.Socket.ActiveConnections-1 do
  begin
    form1.ServerSocket1.Socket.Connections[i].SendBuf(p_test,length(p_test));
  end;
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  me_meg.Lines.Add('server: client connected');
  clientsocket1.Active:=true;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  p_text:pansichar;
begin
  me_meg.Lines.Add('client msg: '+Socket.ReceiveText);
  Socket.ReceiveBuf(p_text,Socket.ReceiveLength);
  write(p_text);
end;


[procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  p_text:pansichar;
begin
 me_meg.Lines.Add('server msg: '+Socket.ReceiveText);
 Socket.ReceiveBuf(p_text,Socket.ReceiveLength);
 clientsocket1.Socket.SendBuf(p_text,Socket.ReceiveLength);
end;
blos das funzt nicht ganz so wie ich es will...
muss ich vlt einen TCP-Server verwenden?


mfg
gandime
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: verbindung weiterleiten

  Alt 6. Mär 2008, 20:40
TServerSocket ist ein TCP-Server. Du solltest dir dringend mal anschauen, wie man mit PChars arbeitet. Insbesondere solltest du Speicher reservieren, bevor du ihn verwendest.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#3

Re: verbindung weiterleiten

  Alt 6. Mär 2008, 20:45
Das selbe könnte man ja auch mit Strings machen aber ein String kann nicht alle Zeichen darstellen, soweit ich weiss!
Was muss ich denn bei Pchar beachten?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: verbindung weiterleiten

  Alt 6. Mär 2008, 20:56
Hier geht es nicht um die Darstellung. Insofern ist es egal, ob du String oder PChar nimmst, aber bei beidem musst du erst Speicher reservieren!

Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  p_text:pansichar;
begin
  me_meg.Lines.Add('client msg: '+Socket.ReceiveText); //Mit ReceiveText wird der interne Puffer geleert - die Daten sind futsch!
  Socket.ReceiveBuf(p_text,Socket.ReceiveLength); //Ein PChar ist nur ein Zeiger. Du kannst keinen Zeiger empfangen!
  write(p_text);
end;
Du musst dir mit GetMem Speicher reservieren und dann mit diesem Speicher arbeiten und ihn mit FreeMem wieder freigeben.

In den anderen Funktionen sind auch noch Fehler drin, aber im Prinzip ist es immer der gleiche wie oben.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#5

Re: verbindung weiterleiten

  Alt 7. Mär 2008, 21:25
So ich hab das jetzt wieder mit Strings gemacht und es funktioniert soweit!
blos wie könnte ich es schaffe mehrere verbindungen gleichzeitig zu verwalten?

edit:
So ich habe mir jetzt noch ein paar Gedanken gemacht^^
die weiterleitung der Daten vom Server zum Clienten sind ja jetzt nicht so schwer, genau so wie die zuweisung blos das Problem ist, wie ich theoretisch undendlich Clientsocket, die dann die einzelnen Verbindungen die beim Server eintreffen weiterschicken.
Also wie kann ich mir "unendlich" viele Clientsockets machen?

edit2:
warum nicht einfach ein array^^
aber ohne Probs geht das ja wiedern nicht

Die Zuweisung funktioniert nicht über eine Procedure:
Delphi-Quellcode:

Procedure load_cs_settings(cs_load:TClientsocket;i_cs:integer);
begin
  cs_load:=TClientsocket.Create(nil);
  cs_load.Host:='127.0.0.1';
  cs_load.Port:=1080;
  cs_load.Address:=inttostr(i_cs);
end;

begin
  for i:=0 to 999 do
  begin
    load_cs_settings(cs[i],i);
  end;
  cs[0].Active:=true;// Fehler: Zugriffsverletzung
end.

//Das funktioniert aber:
  cs[0]:=TClientsocket.Create(nil);
  cs[0].Host:='127.0.0.1';
  cs[0].Port:=1080;
  cs[0].Address:=inttostr(i_cs);
warum?
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#6

Re: verbindung weiterleiten

  Alt 10. Mär 2008, 09:35
deine procedure arbeitet mit einer separaten variable.
Entweder musst du eine variable zurück geben oder mit einem pointer arbeiten.

Delphi-Quellcode:
Function load_cs_settings(cs_load:TClientsocket;i_cs:integer) : TClientsocket;
begin
  cs_load:=TClientsocket.Create(nil);
  cs_load.Host:='127.0.0.1';
  cs_load.Port:=1080;
  cs_load.Address:=inttostr(i_cs);
  result := cs_load;
end;
//oder
Procedure load_cs_settings(var cs_load:TClientsocket;i_cs:integer);
begin
  cs_load:=TClientsocket.Create(nil);
  cs_load.Host:='127.0.0.1';
  cs_load.Port:=1080;
  cs_load.Address:=inttostr(i_cs);
end;
//oder irgend wie so
Procedure load_cs_settings(cs_load:PClientsocket;i_cs:integer);
begin
  cs_load^:=TClientsocket.Create(nil);
  cs_load^.Host:='127.0.0.1';
  cs_load^.Port:=1080;
  cs_load^.Address:=inttostr(i_cs);
end;
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#7

Re: verbindung weiterleiten

  Alt 13. Mär 2008, 11:57
thx für die antwort jetzt is es mir auch aufgefallen
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:09 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