Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Chat klappt nicht (https://www.delphipraxis.net/144273-chat-klappt-nicht.html)

Delphi-Narr 3. Dez 2009 20:57


Chat klappt nicht
 
Hallo,
hab wieder mal ein Problem mit meinem Lan-Chat:

Hab ihne mit folgenden Grundprozeduren aufgebaut:
Server wird eröffnet:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
     Server.Port:=2350;
     Server.open;
end;
Client kontaktiert Zielserver:
Delphi-Quellcode:
{Hab mehrere dieser Radios, beispielsweise einer hier:}
procedure TForm1.Radio1Click(Sender: TObject);
begin
     begin
             Client.Close;
             Status.Caption:='Verbinden mit 192.168.2.105';
             Client.Port:=2350;
             Client.Host:='192.168.2.105';
             Client.open;
             Status.Caption:='Verbunden mit 192.168.2.105';
     end;
end;
Nachricht übermitteln:

Delphi-Quellcode:
procedure TForm1.SendenClick(Sender: TObject);
begin
        //Nachricht ins Nachrichtenfenster:
        begin
             Nachrichten.SelAttributes.Color:=clgreen;
             Nachrichten.Lines.Add('Sie um ' + TimeToStr(Now));
             Nachrichten.Lines.add(eingabe.text);
        end;                                        
        //Senden an Empfänger:
        Status.Caption:='Sende Nachricht...';
        Client.Socket.SendText(Eingabe.text);
        Client.Socket.RemoteHost;
        Status.Caption:='Nachricht gesendet';
end;
Und noch das Empfangen der Nachricht:

Delphi-Quellcode:
procedure TForm1.ServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var Nachricht:string;
    vSender:string;
begin
     Nachricht:=Socket.ReceiveText;
     Nachrichten.SelAttributes.Color:=clred;
     vSender:=Socket.RemoteAddress;
     case vSender[13] of
     '5':vSender:='Sender 1';
     '2':vSender:='Sender 2';
     end;
     Nachrichten.Lines.Add(vSender+ ' um '+TimeToStr(Now)+':');
     Nachrichten.SelAttributes.Color:=clblack;
     Nachrichten.Lines.Add(Nachricht);
     
end;
Jetzt kann ich an mich selber Nachrichten schicken, an andere PCs jedoch nicht...
Der Port muss am Router freigegeben sein, oder?
Wenn ich das erste Mal auf einen der Radiobuttons klicke, kommt das CPU-Fenster - weiß ich nicht warum...

Wo ist der Fehler?
Liebe Grüße!

Whatever 3. Dez 2009 21:21

Re: Chat klappt nicht
 
Hallo!

Was genau sagt denn die Fehlermeldung?

Edit: Gabs da nicht noch eine Eigenschaft .Active die auf true gesetzt werden muss?

Delphi-Narr 3. Dez 2009 21:27

Re: Chat klappt nicht
 
Die Fehlermeldung kommt erst viel später, Asynchroner Fehler... Findet anscheinend den Server nicht, obwohl er läuft...

Luckie 3. Dez 2009 21:39

Re: Chat klappt nicht
 
Firewall mal deaktiviert? Laufen Server und Client zu Testzwecken auf dem gleichen Rechner?

Whatever 3. Dez 2009 21:40

Re: Chat klappt nicht
 
Also so wie ich meinen alten Quelltext verstehe befindet sich der jeweilige Socket durch .open nur sozusagen im "Standby". Die Eigenschaft .Active öffnet dann erst die eigentliche Verbindung. Ich gebe dafür keine Garantie, da es schon einige Zeit her ist und ich gerade nicht testen kann obs stimmt :-D
Achso und ich würde über cmd/ipconfig nochmal sicherstellen, dass Du die richtige IP eingegeben hast :zwinker:

sx2008 4. Dez 2009 00:33

Re: Chat klappt nicht
 
Immer das gleiche Problem: der Server kann Bugs haben, der Client kann Bugs haben und das Netz dazwischen kann Probleme haben (Firewall, DNS-Probleme,...).
Also sollte man den Client durch etwas ersetzen, das garantiert funktioniert - Telnet.
Eingabeaufforderung öffen und folgendes eingeben:
Code:
C:\> telnet localhost 2350
Nur wenn jetzt keine Fehlermeldung kommt, ist der Server prinzipiell bereit eine Verbindung anzunehmen.
Danach kannst du einige Zeichen eintippen und schauen wie der Server reagiert.
Telnet zeigt die auch alle Daten an, die vom Server kommen.

Du kannst das dauerhaft in deinem Gedächtnis abspeichern:
Wenn eine Kommunikation zwischen zwei Programmen hergestellt werden soll, dann beginnt man immer mit einem Tool,
dass garantiert funktioniert.
Das gilt für TCP/IP genauso wie für die serielle Schnittstelle.
Wenn ich z.B. ein Problem mit FTP habe, dann verwende ich immer Telnet servername 21.
Kommt keine Verbindung zustande, braucht man mit Indy-Komponenten gar nicht weitermachen.


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