AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Einen Chat mit den Sockets programmieren
Tutorial durchsuchen
Ansicht
Themen-Optionen

Einen Chat mit den Sockets programmieren

Ein Tutorial von Ultimator · begonnen am 5. Mai 2004 · letzter Beitrag vom 30. Jan 2014
 
hardy1234

Registriert seit: 8. Aug 2004
Ort: Hamburg
26 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Einen Chat mit den Sockets programmieren

  Alt 14. Feb 2005, 05:10
Ganz nett, nur

1. Warum immer die Indy's?
2. Warum das ganze immer mit Timern?

Ich hab das mit den Delphi7-Internetkomponenten realisiert und das vollständig Event-gesteuert und mit Threads veranstaltet. Allerdings ist hierfür ein Proxy-Server zu programmieren, der die Web-IP's der Clients vorhält. Schließlich soll das Ding ja auch im Internet funzen.

Notwendig ist hierfür:

1. Über www.dyndns.org oder www.no-ip.com sich einen Alias-Namen besorgen (kost nix)
2. Der Client muß sowohl eine TcpClient- und TcpServer-Komponente haben.

Nach anfänglichen Problemen mit den Delphi-Komponenten hab ich die Unit kopiert und noch ein paar Änderungen vorgenommen. Z.B. TcpCustomClient.ReadStream. Das funzt prima.
Etwas aufwendig ist die Kiste mit den Threads, das leidige Problem der Online-Hilfe bzw. dem Handbuch ist ja bekannt.

Ist der Server(Client) gestartet horcht der fröhlich am Port auf ankommende Nachrichten und erzeugt sofort einen Thread in dem die Vorverarbeitung stattfindet (eigenes IP-Protokoll nötig).
Damit der Client nun auch seine Web-IP bekommt sendet er eine Anforderung an den Proxy-Server der sofort mit der Web-IP antwortet. Das ganze natürlich verschlüsselt und mit einem Zertifikat versehen. Die Zeitabläufe entsprechen etwa einem normalen Ping, ca. 70-80 ms. Wenn das nix ist?

Der Server hält eine Firebird-Datenbank vor, in der die Web-IP's der Clients gespeichert werden und so für alle Clients mit dem entsprechenden Zertifikat weltweit vorgehalten werden. Sollte der Client zwischendurch seine Web-IP ändern, teilt er das per Thread allen Online-Clients selber mit. Da das über einen Thread läuft merkt der Anwender nichts davon. Das ist gar keine schwierige Übung, man sendet einfach einen Header mit dem entsprechenden Befehl und der Serversocket im empfangend Client hat automatisch die neue IP (Client.LookUpHostAddr(Client.HostName)). Vorbedingung ist lediglich, das der Nickname je Client eineindeutig ist.

Vorteil bei diser Vorgehensweise ist, das der Serversocket im Client nur dann etwas tut wenn er auch Daten empfängt. Ob der Client dann stundenlang nix tut oder nicht ist schißkujennum. Er belastet anders als beim IRC den Server(Proxy) nicht.

Besonders lustig ist bei der ganzen Sache, das die Kiste auch im internen Netzt klappt. Das einzige Problem, das ich noch lösen muß ist die Weiterleitung ins interne Netz wenn der Client von dort gesendet hat und die gemeinsame Web-IP benutzt um einen Client irgendwo auf der Welt zu erreichen.

Wenn jemand Spaß daran hat bei dem Projekt ein bißchen mit zu tun dann bei mir melden. Da ist noch ne Menge Arbeit dran. Das ganze ist auch bezüglich Threads und Netzwerk-Programmierung lehrreich und echt spannend.

Am Besten an der ganzen Sache ist, daß man das Website-Geschisse und den Browser nicht braucht. Das funzt mit nem ganz normalen Programm und damit sicherer und schneller als jedes Script das je könnte.
Es gibt keinen schöneren Tag als den heutigen. Der gestrige ist vorbei und von den kommenden weiß man nicht was sie bringen.
  Mit Zitat antworten Zitat
 


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 06:53 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 by Thomas Breitkreuz