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
Antwort Antwort
Seite 6 von 11   « Erste     456 78     Letzte »    
Benutzerbild von Ultimator
Ultimator
Registriert seit: 17. Feb 2004
So, hier nun mein erstes Tutorial: Wie baue ich mir einen Chat

Es geht darum, wie man einen Chat mit einem zentralen Server mit den Sockets baut. Es werden dabei TClientSocket und TServerSocket verwendet. Sollte es auf genügend positive Resonanz stoßen, würde ich mich eventuell bereiterklären, weitere Tutorials zu schreiben.Bitte meldet mir (Tipp-)Fehler und weiteres, damit ich es immer weiter ausbauen und verbessern kann. Ich wäre für jede Kritik (und natürlich auch jedes Lob) sehr dankbar. Genug geredet, hier ist es nun endlich.

[edit]Da bei manchen Leuten der Download nicht zu funktionieren scheint, probiert es mal mit "Ziel speichern unter". Alternativ dazu habe ich hier noch den Link zu der Datei auf meinem Webspace: http://home.arcor.de/ultimator/Chat-Tutorial_1.1.pdf

[edit=Phoenix]Tutorial aktualisiert. Mfg, Phoenix[/edit]
Angehängte Dateien
Dateityp: pdf chat-tutorial_1.1_123.pdf (62,0 KB, 1609x aufgerufen)
 
Benutzerbild von Ultimator
Ultimator

 
FreePascal / Lazarus
 
#51
  Alt 9. Jan 2005, 20:21
Ungefähr hier
Julian J. Pracht
  Mit Zitat antworten Zitat
Äfan
 
#52
  Alt 9. Jan 2005, 20:26
Oh, bisschen daneben geschaut, aber ich habe es gelesen, nur net realisiert oder besser compiliert

greez
  Mit Zitat antworten Zitat
hardy1234

 
Delphi 7 Enterprise
 
#53
  Alt 14. Feb 2005, 04: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.
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

 
FreePascal / Lazarus
 
#54
  Alt 14. Feb 2005, 12:46
Ja, das ist auch eine gute Möglichkeit, aber ich wollte hier in dem Tutorial ja an einem einfachen, auch für Anfänger leicht nachzuvollziehenden Beispiel erklären, wie man die Sockets nutzt, um nen Chat zu schreiben

Klar, ich könnte das auch anders machen, aber dann würd es vermutlich nicht mehr den o.g. Bedingungen entsprechen
Julian J. Pracht
  Mit Zitat antworten Zitat
nico525

 
Delphi 2005 Personal
 
#55
  Alt 24. Mär 2005, 12:49
*netallesgenaudurchgelesen*
aber ich kann sagn irgendwie funzt der dwnload net *heul*
könnt ihr mir sagen wie as jetzt mit dem chat geht
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

 
FreePascal / Lazarus
 
#56
  Alt 24. Mär 2005, 19:56
Hmmm, also das mit dem separaten Link kann nicht mehr funktionieren, da ich meinen Webspace anderweitig nutze

Aber hast du mal die angehängte PDF-Datei mit "Ziel speichern unter.." herunterzuladen versucht?
Bei mir klappt nämlich komischerweise alles
Julian J. Pracht
  Mit Zitat antworten Zitat
nico525

 
Delphi 2005 Personal
 
#57
  Alt 24. Mär 2005, 21:43
geht net entweder hab ich keinen zugriff auf die datei oder si existiert net
  Mit Zitat antworten Zitat
Matrix Scripter
 
#58
  Alt 24. Mai 2005, 00:33
Holla!
Ich hab das Problem das im Memofeld des Clients nix steht.
Aber in dem des Servers schon...
Woran könnte das liegen?

mfG Matrix Scripter
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus
 
#59
  Alt 24. Mai 2005, 06:50
Hallo Matrix Scripter,

wie ich im andern Thema geschrieben habe, musst du die Ereignisse zuweisen, wenn du die Sockets dynamisch erstellst, bzw. auch wenn du die Sockets zur Designtime auf die Form setzt, und die Ereignisse nicht im OI zuweist.
Hast du dies auch für TClientSocket.OnRead gemacht? Das OnClientRead-Ereignis ist ein Ereignis des ServerSockets, für das ClientSocket musst du noch eines schreiben.

Greetz
alcaeus
Andreas B.
  Mit Zitat antworten Zitat
Matrix Scripter
 
#60
  Alt 24. Mai 2005, 13:47
Okay ist das dann
client.OnRead := clientRead; ?
Und steht das auch im Tutorial, wenn ja dann hab find ichs nicht^^

mfG Matrix Scripter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 11   « Erste     456 78     Letzte »    


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 11:22 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