![]() |
IdTCPClient <> IdTCPServer: Verbindungsproblem
Das ganze ist jetzt etwas kompliziert, aber ich hoffe, dass ihr das versteht :mrgreen:
Ich entwickle gerade ein Chatprogramm, das ohne Server auskommen soll. Allerdings hab ich keine Lust, 2 unterschiedliche Programme zu machen, die dann jeder besitzen muss... Also mach ich eins, das einen IdTCPClient und einen IdTCPServer enthält. Als Chatter geb ich meinem Gegenüber meine IP und der verbindet sich zu mir (mittels IdTCPClient). (Später werd ich das vllt. mit nem Server mit MySQL-Datenbank oder so lösen) Nach dem Aufbau der Verbindung wird der Nick übermittelt. Diesen Nick fängt der Server ab, holt sich die IP der Verbindung, gibt sie meinem IdTCPClient und der versucht, sich zum Gegenüber verbinden. Nun schlägt das aber fehl. Das Gegenüber stellt zu mir eine Verbindung her, ich krieg die IP, aber die Gegenverbindung geht net. Wenn ich das ganze mit 127.0.0.1 als IP durchführe, erscheint der Fehler auch - es kann also weder am Router, noch an der Firewall liegen - aber woran dann? Hier noch paar Quellcodeausschnitte: Klick auf den Connect-Button:
Delphi-Quellcode:
Abfangen der Nachricht Chr(255)+'+'+OwnNick:
IdTCPClient1.Host:=IPEdit.Text;
try IdTCPClient1.Connect(); IdTCPClient1.WriteLn(Chr(255)+'+'+OwnNick); except Messages.Lines.Add('['+TimeToStr(Time)+'] Error on connecting with '+IPEdit.Text); exit; end;
Delphi-Quellcode:
Die Nachricht Chr(255)+'n'+OwnNick wird wiederum auf der Gegenseite ausgewertet, doch das ist nicht von Bedeutung, da dieser Befehl ja nie ausgeführt wird...
{in IdTCPServer.Execute}
//der variable str wurde bereits die nachricht zugeordnet if(str[1]=Chr(255)) then begin if(str[2]='+') then begin Nick:=StrPart(str,3,Length(str)); //StrPart ist meine eigene Funktion ;) IdTCPClient1.Host:=AThread.Connection.Socket.Binding.PeerIP; //IP auslesen try IdTCPClient1.Connect(); except begin Messages.Lines.Add('['+TimeToStr(Time)+'] '+Nick+' connected to you, but I can''t create a connection to him/her. :('); exit; end; end; Messages.Lines.Add('['+TimeToStr(Time)+'] '+Nick+' connected to you!'); IdTCPClient1.WriteLn(Chr(255)+'n'+OwnNick); end; end; MfG Z4ppy |
Re: IdTCPClient <> IdTCPServer: Verbindungsproblem
Hi,
Dir ist schon klar das Du über eine TIdTcpClient Verbindung auch Daten lesen kannst ?! Zwar ist bei Deinem Ziel schon richtig TIdTcpClient und TIdTcpServer zu verwenden, allerdings reicht eine Verbindung : Client A zu Server B oder Client B zu Server A. Gruß Data |
Re: IdTCPClient <> IdTCPServer: Verbindungsproblem
Tatsächlich? Hmm, da muss ich mich mal umgucken...
Trotzdem wird mir deshalb net klar, warum denn diese Verbindung nicht möglich ist ;) MfG Z4ppy |
Re: IdTCPClient <> IdTCPServer: Verbindungsproblem
Wird die IP richtig ermittelt? Und was für eine Fehlermeldung kommt denn?
|
Re: IdTCPClient <> IdTCPServer: Verbindungsproblem
Könnte es nicht sein, dass die Gegenverbindung nicht klappt, weil der Port schon belegt ist?
|
Re: IdTCPClient <> IdTCPServer: Verbindungsproblem
Was ist denn Messages? Ne Memobox? imho is das idTCPServer.execute ein extra Thread. Sämtliche Prozeduren, die auf dein Formular "malen" musst du daher mit dem Thread synchronisieren.
|
Re: IdTCPClient <> IdTCPServer: Verbindungsproblem
Zitat:
|
Re: IdTCPClient <> IdTCPServer: Verbindungsproblem
@3_of_8: Ich hab mir die IP vom Gegenüber anzeigen lassen, die is korrekt (bei Verbindung zu 127.0.0.1 gibts dann auch 127.0.0.1 aus)
@Die Muhkuh: Tja, Client und Server verwenden natürlich denselben Port - ich empfang also eine Verbindung des Anderen auf Port X und versuch dann mit meinem Clienten, ne Verbindung über Port X zum Andern herzustellen - aber das sollte ja eigentlich keine Kollisionen geben, da die eine Verbindung ausgehend, die andere hereinkommend is... @alleinherrscher: Messages is n TRichEdit... Da kommen halt dann alle Nachrichten rein ;) Und auch solche Meldungen wie "can't connect to ..." usw. MfG Z4ppy |
Re: IdTCPClient <> IdTCPServer: Verbindungsproblem
Wenn ich das richtig sehe, hast du dann aber 2 Server auf einem PC die auf Port X lauschen wollen, das geht nicht.
|
Re: IdTCPClient <> IdTCPServer: Verbindungsproblem
Nein, ich habe einen ;)
Ich starte den Chat 1mal und gebe dann 127.0.0.1... Der Server im eigenen Programm erhält dann die Nachricht - ich hab also nur einen ;) Allerdings gibts da dann ne kollision, da ich den Host vom IdTCPClient ändern will (zumindest theoretisch) und dadurch iwie was schief läuft... Aber das ändert nix daran, dass es via iNet net geht :( MfG Z4ppy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr. |
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