AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Chat mit Sockets über Server...
Thema durchsuchen
Ansicht
Themen-Optionen

Chat mit Sockets über Server...

Ein Thema von DjSp4rkY · begonnen am 31. Jan 2010 · letzter Beitrag vom 1. Feb 2010
Antwort Antwort
DjSp4rkY

Registriert seit: 2. Mai 2009
17 Beiträge
 
#1

Chat mit Sockets über Server...

  Alt 31. Jan 2010, 02:28
Hey liebe DPler,

ich bastel momentan an einem chatprogramm.

bisher lief es so ab, dass mit dem chatpartner IP und Port ausgetauscht wurden um eine direkte verbindung herzustellen.


nun habe ich die möglichkeit, das chatprogramm über einen server laufen zu lassen, um keine direkte verbindung mehr zu benötigen.


meine frage nun:
wie schaffe ich es, dass mein chatpartner die nachricht erhält, die ich an den server sende?


gruß
  Mit Zitat antworten Zitat
Benutzerbild von BackOrifice
BackOrifice

Registriert seit: 6. Jun 2005
74 Beiträge
 
Delphi 2007 Architect
 
#2

Re: Chat mit Sockets über Server...

  Alt 31. Jan 2010, 03:00
Halbwissen:
Entweder melden sich alle Clients beim Server an und senden zum und empfangen vom Server.

Oder jeder Client sendet und fragt automatisch in einem gewissen Intervall den Server, ob er eine neue Nachricht für ihn hat.
Henning
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Chat mit Sockets über Server...

  Alt 31. Jan 2010, 08:50
Normalerweise ist es wie folgt implementiert.
- Jeder meldet sich beim Server an (stellt eine Verbindung her)
- (vom Server kann man abfragen wer alles angemeldet ist)
- Wenn jemand eine Nachricht schickt, wird diese an den Server geschickt mit der Angabe an wen diese Nachricht zugestellt werden soll. Der Server schaut nach ob derjenige auch verfügbar ist (eine Verbindung hergestellt hat) und sendet die Nachricht entsprechend an den jenigen (mit Vermerk von wem diese kommt)

Es wird also jeder Nachricht voran gestellt an wen sie gehen soll bzw. wenn der Server sie weiter gibt, von wem diese kommt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
DjSp4rkY

Registriert seit: 2. Mai 2009
17 Beiträge
 
#4

Re: Chat mit Sockets über Server...

  Alt 31. Jan 2010, 19:30
Zitat von SirThornberry:
Normalerweise ist es wie folgt implementiert.
- Jeder meldet sich beim Server an (stellt eine Verbindung her)
- (vom Server kann man abfragen wer alles angemeldet ist)
- Wenn jemand eine Nachricht schickt, wird diese an den Server geschickt mit der Angabe an wen diese Nachricht zugestellt werden soll. Der Server schaut nach ob derjenige auch verfügbar ist (eine Verbindung hergestellt hat) und sendet die Nachricht entsprechend an den jenigen (mit Vermerk von wem diese kommt)

Es wird also jeder Nachricht voran gestellt an wen sie gehen soll bzw. wenn der Server sie weiter gibt, von wem diese kommt.

aber wie genau kann ich denn abfragen, wer am server angemeldet ist?
ich hab bisher nur herausgefunden wieviele aktive verbindungen bestehen und wie ich an eine bestimmte verbindung etws senden kann
allerdings ohne das wissen, wer sich hinter der verbindung versteckt

gruß
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Chat mit Sockets über Server...

  Alt 31. Jan 2010, 19:40
Das musst du dir natürlich selbst ausdenken. Ein Programm kann schließlich nicht Gedanken lesen um heraus zu finden welchen Nickname sich jemand geben will.
Du musst dir also ein Kommando ausdenken welches der Client an den Server schicken kann, auf welches der Server mit einer Auflistung der verbundenen Clients reagiert. Ob jeder Eintrag der Liste aus einer Socket-ID besteht oder ein Nickname dahinter steckt bleibt dir überlassen. Wenn ein Nickname oder dergleichen dahinter steckt, muss jeder Client nach dem Verbinden zum Server, dem Server natürlich auch eben diese Informationen übermitteln.

Also:
- Client verbindet zu Server
- Client schickt Nickname/LoginID zu Server

- Server wartet auf Verbindungen
- Server wartet auf Commandos (Anmeldung, Abfrage der Nutzerliste, Senden einer Nachricht an xy)
- Wenn Anmeldung erfolgt, prüfen ob eventuelles Passwort stimmt und dann in eine Liste angemeldeter Nutzer einfügen
- Wenn Nutzerliste abgefragt wird dann alle IDs(Nicknames) zurück schicken (natürlich nur dann möglich wenn Client erfolgreich einen Nickname/LoginID übermittelt hat)
- Wenn Nachricht an XY geschickt werden soll, prüfen ob XY angemeldet ist und die Nachricht entsprechend an den entsprechenden Client weiter leiten

Im übrigen macht es keinen Sinn einen kompletten Beitrag zu zitieren wenn dieser der direkte Vorgänger ist. Würde das jeder machen würde jede Antwort nur noch aus einem riesen Zitat des vorhergehenden Beitrages bestehen welcher wiederum aus einem Zitat der Beitrag vor jenem besteht etc.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
DjSp4rkY

Registriert seit: 2. Mai 2009
17 Beiträge
 
#6

Re: Chat mit Sockets über Server...

  Alt 1. Feb 2010, 00:17
1. sry wegen dem zitieren

2. habs jetzt folgendermaßen gelöst:
wenn sich jemand beim server einloggen will, dann wird einfach ein record zum server gesendet, in dem unter anderm der Nickname steht
(die anderen variablen im record sind irrelevant für mein problem und wurden deshalb nicht erwähnt)

wenn der server das paket erhält dann wird der Nickname in verbindung mit der IP des absenders (die ich durch Socket.RemoteAddress erhalten habe)
in einem array abgespeichert

so wird dann jedes mal vorgegangen, wenn sich jemand einloggt


wenn man nun jemanden direkt anschreiben will, wird folgendes eingegeben: /NicknameDesZiels Nachricht
=> wenn der server diese nachricht bekommt, vergleicht er den zielnicknamen mit allen vorhandenen im array
wenn es einen treffer gibt, wird die zum zielnick zugehörige IP aus dem array ausgelesen

als letztes wird die nachricht dann direkt an das Ziel gesendet, anstatt in den großen chatraum in dem alle nachrichten landen

das wars

ich habs deshalb so ausführlich geschrieben, damit jemand vllt anregungen und hilfestellungen für ein ähnliches problem bekommt


gruß
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#7

Re: Chat mit Sockets über Server...

  Alt 1. Feb 2010, 09:44
Zitat von DjSp4rkY:
..vergleicht er den zielnicknamen mit allen vorhandenen im array
wenn es einen treffer gibt, wird die zum zielnick zugehörige IP aus dem array ausgelesen
Hallo DjSp4rkY, günstiger ist es immer mit dem Socket zu suchen und zu arbeiten.
Ein Socket ist immer für Client und Server eindeutig. Bei Verwendung von IP's bekommst Du zwangsläufig probleme.


lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:05 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