Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Frage zu SocketServer und senden an einen Client (https://www.delphipraxis.net/55175-frage-zu-socketserver-und-senden-einen-client.html)

tavoc 17. Okt 2005 18:07


Frage zu SocketServer und senden an einen Client
 
Hallo,

ich sitze nun schon längere Zeit ein einem grundlegenden Problem, ich schaffe es nicht das mein Server einem Client Daten sendet.

Ich möchte mit dem Programm erreichen das es sich "zwischen" 2 rechner schaltet, also z.b. Client und IRC Server, damit kann man z.b. die Portsperre an einigen Orten umgehen.
Dazu connecte ich mit meinem Programm zu dem IrcServer und zu einem Irc Client (Trillian etc.), das Problem liegt darin das mein Programm Trillian nicht mitteilt was es vom IrcServer erhält.


Der Fehler liegt irgendwo bei serversocket.Socket.Connections[0].SendText(empfangen), aber ich weiß nicht wie ich es sonst machen kann.


Delphi-Quellcode:
function TMainForm.connect():boolean;
begin
  ServerSocket.Port:=1024;
  ServerSocket.Open;
  if ClientSocket.Active then ClientSocket.Close;
  ClientSocket.host :='irc.spotchat.org';
  ClientSocket.Port :=6667;
  ClientSocket.Open;

end;

procedure TMainForm.ToolButton1Click(Sender: TObject);
begin
  connect;
end;

procedure TMainForm.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var empfangen: string;
begin
  empfangen := Socket.ReceiveText;
  memo1.Lines.Add(empfangen);


  if serversocket.Socket.Connected then serversocket.Socket.Connections[0].SendText(empfangen);  

end;

procedure TMainForm.ToolButton2Click(Sender: TObject);
begin
  ClientSocket.Close;
  ServerSocket.Close;
end;

procedure TMainForm.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var empfangen: string;
begin
  empfangen := Socket.ReceiveText;
  memo1.Lines.Add(empfangen);
  clientsocket.Socket.SendText(empfangen);
end;

procedure TMainForm.ServerSocketClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add('OnAccept');
  Memo1.Lines.Add(Socket.RemoteAddress +'remoteadress');
  Memo1.Lines.Add(IntToStr(Socket.RemotePort)+'remoteport');
  Memo1.Lines.Add(Socket.LocalAddress+'localadress');
  Memo1.Lines.Add(IntToStr(Socket.LocalPort)+'localport');
end;

Ich danke schonmal im Vorraus für Eure Hilfe.

Net7 17. Okt 2005 23:13

Re: Frage zu SocketServer und senden an einen Client
 
Unabhängig davon, das ich bezweifle das, das was du vorhast überhaupt funktioniert kannst du ja mal
serversocket1.socket.sendtext(empfangen) probieren.

Ich denke aber das Trillian seine Daten übern Buffer auswertet. So das es mit Sendtext nix anfangen kann.

ripper8472 17. Okt 2005 23:23

Re: Frage zu SocketServer und senden an einen Client
 
richtig, sendtext uebertraegt ansistrings, die nur borland und damit entwickelte programme verstehen.

du kannst nicht zu trillian verbinden, trillian muss zu dir verbinden.

an deiner stelle wuerd ich mir noch zwei dummyprogramme schreiben, die als client und server herhalten und definierte daten versenden.

tavoc 18. Okt 2005 06:17

Re: Frage zu SocketServer und senden an einen Client
 
Trillian verbindet ja schon zu meinem Programm, das heißt er greift ja auf die Sockets zu.

Ich erhalte von der Serverkomponente eine Authentifizierung.
Die Daten die gesendet werden sind ja auch definiert, es gibt ja eine RFC fürs IRC, und da man Chatprogramme die sich des IRCs behelfen auch mit den Sockets schreiben kann, sollte es doch auch hier gehen.

@ripper8472 das heißt also ich sollte anstatt der Serverkomponente noch ein Client nehmen?
Das dürfte doch auch nicht gehen da da keine der Seiten (Mein Programm-Trillian) den Server spielt.

flossinger 18. Okt 2005 18:39

Re: Frage zu SocketServer und senden an einen Client
 
Hallo,
was ripper hier schreibt ist nicht richtig:
Zitat:

richtig, sendtext uebertraegt ansistrings, die nur borland und damit entwickelte programme verstehen.
Ganz im Gegenteil, was sendtext() versendet, kann allgemein gelesen werden, WENN DAS RICHTIGE VERSENDET WIRD. Das habe ich auch intensiv getestet: Webapplikationen, in denen ich sendtext verwende, kommunizieren erfolgreich und problemlos mit jedem Webserver und jedem Mailserver.

der Flossinger

ripper8472 18. Okt 2005 19:35

Re: Frage zu SocketServer und senden an einen Client
 
wieder was gelernt :)

@OP: du brauchst einen server, zu dem trillian verbindet und einen client, der zum irc server verbindet.

vom irc protokoll musst du garnichts wissen. du musst nur die daten an beiden seiten durchreichen und gut is.

tavoc 19. Okt 2005 06:31

Re: Frage zu SocketServer und senden an einen Client
 
Könntet Ihr mir noch sagen wo genau das sendtext() hinmuss damit es funktioniert?

So langsam bin ich am verzweifeln, wenn ich jetzt kompilieren würde kommt immer: das das Listenindex überschritten wird.

Wenn ich nur sendtext schreibe kommt: socket nicht verbunden, bei einem sendto wurde keine adresse eingeben fehler 10057.

Ich dachte das der server zu allen seinen clients senden würde...

Net7 19. Okt 2005 17:07

Re: Frage zu SocketServer und senden an einen Client
 
Zitat:

Zitat von tavoc
Könntet Ihr mir noch sagen wo genau das sendtext() hinmuss damit es funktioniert?

So langsam bin ich am verzweifeln, wenn ich jetzt kompilieren würde kommt immer: das das Listenindex überschritten wird.

Wenn ich nur sendtext schreibe kommt: socket nicht verbunden, bei einem sendto wurde keine adresse eingeben fehler 10057.

Ich dachte das der server zu allen seinen clients senden würde...


Nur mal angenommen Trillian wertet ankommende Daten über einen Buffer aus.

Und Clientpaket_empfangen wäre der Buffer.

Das würde in Delphi in etwa so aussehen:

Delphi-Quellcode:
// fiktive Datenannahme von Trillian, mal angenommen  
Socket.ReceiveBuf(Clientpaket_empfangen,sizeof(Clientpaket_empfangen));
Dann wird Dein sendtext() nicht viel bringen, weil du gänzlich einen falschen Typ schickst.

Solange du nicht weißt was du Trillian schicken musst, wirst du scheitern.

Um das herrauszufinden, müstest du schon die Entwickler fragen.

tavoc 19. Okt 2005 21:43

Re: Frage zu SocketServer und senden an einen Client
 
Aber der IRC Server sendet doch auch nur text, ich habe mal nen eigenen client geschrieben und der hat auch alles mit text gemacht, wenn also trillian was anderes erwarten würde müssten ja alle ircserver das auch so senden.

Aber in der rfc steht doch das es text ist.

ripper8472 19. Okt 2005 22:30

Re: Frage zu SocketServer und senden an einen Client
 
ignoriere das. irc ist text, hauptsaechlich.

funktioniert dein programm jetzt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr.
Seite 1 von 2  1 2      

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