Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Routerproblem (https://www.delphipraxis.net/38807-routerproblem.html)

Rastaman 24. Jan 2005 14:22


Routerproblem
 
Hi. Ich hab mit meinem Freund n kleines Prog gemacht das über internet nachrichten sendet.
Ich habe Router und er isdn.
So wenn ich jetzt bei mir den ServerSocket über port 80 laufen habe kann er problemlos connecten und ich bekomme die nachticht.
Allerdings kann ich nicht zu ihm connecten, und wenn ich als server versuche auch ne nachricht zu senden, dann kommt ein socketfehler der sagt, dass der server nicht verbunden ist?
Was muss ich jetz am Router umstellen und warum kann ich als server nicht zurücksenden?

tn249 24. Jan 2005 14:29

Re: Routerproblem
 
du musst auf deinem router den port forwarden, ich würde dazu aber nicht 80 verwenden sondern irgendwas >1000

das es soweit geht ist mir unerklärlich, ich wäre davon ausgegangen dass es gar nicht funktioniert

nimm nen seperaten port, so is die sache am saubersten

MfG
tn249

Sergej 24. Jan 2005 14:31

Re: Routerproblem
 
Hmm nimm vielleicht mal nen anderen Port als 80 und dann richte bei deinem Router eine Portweiterleitung für diesen Port ein. Ich hoff dass funktioniert ;-)


[edit] mist....wieder einer schneller :D[/edit]

Ultimator 24. Jan 2005 14:32

Re: Routerproblem
 
Du musst in deinem Router-Konfigurations-Programm den Port auf dem ihr sendet forwarden ;-)

Rastaman 24. Jan 2005 14:36

Re: Routerproblem
 
Also die Ports sind schon frei.
Habe jetz mal versucht mit mir selbst (127.0.0.1) zu verbinden über port 137 und 4662 aber es kommt der gleiche fehler.

Sergej 24. Jan 2005 14:44

Re: Routerproblem
 
Also ich denke, wenn du dich mit localhost (127.0.0.1) verbindest, geht das gar nicht über den Router, hat also auch nichts mit Portweiterleitung zu tun. Ich nehm deshalb mal an, dass an deinem Programmcode was nicht stimmt. Hast du schon mal probiert das ganze in der Delphi-IDE laufen zu lassen? Du kannst ja auch mal den Code hier posten...

MFG Sergej

Rastaman 24. Jan 2005 14:46

Re: Routerproblem
 
Oh mit meiner internen IP klappts auch nicht (192.168....)

Sergej 24. Jan 2005 14:49

Re: Routerproblem
 
dann poste mal deinen Programmcode...sonst ist das alles ein wenig abstrakt ;-)

tn249 24. Jan 2005 15:05

Re: Routerproblem
 
ein ping an meine eigene ip wird nich vom netzwerksniffer erkannt

ich denke dass die auch real nich im netzwerk auftaucht sondern von der netzwerkkarte oder vom system(winxp) simuliert wird

MfG
tn249

edit: wichtigste vergessen: wahrscheinlich kann man dadurch darauf schließen, dass sämtliche anfragen an die eigene ip nicht aufs netzwerk gelegt werden(zumindest bei meiner konfiguration :-D )

Rastaman 24. Jan 2005 15:25

Re: Routerproblem
 
Ja aber übers netz klappts ja auch nicht

Rastaman 24. Jan 2005 15:53

Re: Routerproblem
 
Server:
Code:
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Server.Port := 4662;
  Server.Active := True;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Server.Active := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Server.Socket.SendText(Edit1.Text);
end;

procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add(Socket.ReceiveText)
end;

end.
Client
Code:
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Client.Host := '254.254.254.254';
  Client.Port := 4662;
  Client.Active := True;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Client.Active := False;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Client.Socket.SendText(Edit1.Text)
end;

procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add(Socket.ReceiveText)
end;

end.

tn249 24. Jan 2005 16:06

Re: Routerproblem
 
Zitat:

property Active: Boolean;

Description

Before attempting to use or change the socket connection, read Active to determine whether the connection is open and ready. For client sockets, setting Active opens or shuts down a socket connection to another machine. For server sockets, setting Active opens or shuts down a listening connection that makes the socket available for client requests.

At design time, set Active to True to make the socket open a connection when the application starts running. At runtime, use the Open or Close method to open or close the connection.
soll heißen, dass du statt client.active client.open benutzen sollst

MfG
tn249

Rastaman 24. Jan 2005 16:20

Re: Routerproblem
 
Gut danke das klappt bestens :-D
Allerdings hab ich immer noch das Problem dass ich nicht Client sein kann was zwar nichts macht, da ich immer server sein könnte, aber es regt mich trotzdem auf. Wie gesagt, alle Ports sind frei für Rein und für Raus.

SirThornberry 24. Jan 2005 16:45

Re: Routerproblem
 
das ->254.254.254.254<- ist deine IP? :? Bist du dir sicher das es klappt wenn dein freund als Server fungiert und dir eine Nachricht schickt? Denn mit
Delphi-Quellcode:
Server.Socket.SendText(Edit1.Text);
sollte das eigentlich nicht funktionieren.
Dir sollte bewusst sein das zu einem Server mehrere Clients verbinden können und über deinen Quelltext wäre es ja gar nicht möglich einzelnen Clients zu antworten (du gibst ja schließlich nirgends was an was den Client spezifizieren würde). Spätestens an dieser Stelle müsstest du also schon stutzig geworden sein das der Quelltext nicht stimmen kann.

probiers mal mit
Delphi-Quellcode:
ServerSocket1.Socket.Connections[0].SendText(Edit1.Text);
Die 0 steht hierbei für die Verbindung mit dem Index 0. Wenn also mindestens ein Client verbunden ist kannst du somit an den Client-0 eine Nachricht schicken. Wenn 2 Clients verbunden wären könntest du mit
Delphi-Quellcode:
ServerSocket1.Socket.Connections[1].SendText(Edit1.Text);
eine Nachricht an den zweiten client schicken.

Rastaman 24. Jan 2005 16:47

Re: Routerproblem
 
Ok danke. Die Ip ist natürlich nur erfunden und soll meine dynamische halt ersetzen :-D
Kann ich denn Informationen mitsenden, von welchem Client gesendet wurde? Und dann halt nur an den entsprechenden zurücksenden?
Das Problem mit der Verbindung zu ihm besteht übrigens immer noch :cry: Hoffentlich weis das noch einer.

<edit>Oder einfach so ?
Code:
Server.Socket.Connections[Socket].SendText('Text');
</edit>

SirThornberry 24. Jan 2005 17:01

Re: Routerproblem
 
im "ServerClientRead" bekommst du den Parameter "Socket" des sendenen Clients. Wenn du dir diesen merkst kannst du dann auch über
Delphi-Quellcode:
GemerkterSocket.SendText(Edit1.Text);
an diesen zurück senden.
Und wenn du das ganze nur mit einem Client machst kannst du auch einfach das ganze dem "Connection[0]", wie schon beschrieben, realisieren


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 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