Projekt mit
1 €
unterstützen?
So geht das *:


Little Chat

 

1. Vorwort

 

Dieses kleine Tutorial stammte von Nicolai Benz und wurde von mir bearbeitet sowie etwas überarbeitet. Hoffe er findet ein paar seiner Worte im folgenden Text wieder ;)
Aber langer Rede kurzer Sinn: Chat-Programme sind heutzutage fast nichtmehr wegzudenken. Also, wieso dann nicht selbst mal einen kleinen Chat programmieren? Mit Turbo Delphi(R) kein Problem! Das Einzige was ihr zuerst machen müsst, ist, die notwendigen Komponenten zu installieren. Gut, das klinkt schlimmer als es ist, denn in etwa 2 Minuten ist schon alles getan: Also startet mal schnell Delphi, damit wir auch gleich loslegen können!

Zum Installieren der Komponenten führen wir dann folgende Schritte aus:

  • Im Menü "Komponenten" -> Packages installieren
  • Im nun offenen Fenster: "Hinzufügen"
  • Hiernach in den Bin-Ordner von Turbo Delphi wechseln. (bei mir ist das unter C:\Programme\Borland\BDS\4.0\Bin)
  • Dann wählt die Datei "dclsockets100.bpl"
  • Alles bestätigen.
  • Fertig.

Und schon kann TCP/IP-mäßig losprogrammiert werden und ab hier übernimmt Nic ;)

 

2. Ein einfacher Chat

 

in Delphi zu programmieren ist kein problem. Also du brauchst zwei Programme, ein Client und Server. Die Clients werden dann die eigentlichen Chat-Programme sein und auf den Rechnern im Netzwerk laufen. Die Clients verbinden dann zum Server und dieser verteilt die Nachrichten an alle. Das ist jetzt dann auch schon das Grundprinzip unseres Chat-Programmes.

2.1 Der Client

Also ich fang mal mit der Client-Applikation an: Man brauchst als erstes die Komponente TClientSocket die findest du in der Gruppe Internet. Dann brauchst du zwei Memos, in das erste kann man dann den zu sendenden Text reinschreiben und im zweiten den Chatverlauf sehen. Außerdem noch ein Button zum Senden. Dann brauchst du noch drei Edits für die IP, den Port und den Nicknamen. Ach ja, einen weitern Button zum Verbinden wärs dann noch. Hier mal ein Screenshot von meinem Formular:

Und damit man das Memo zum anzeigen des Textes nicht editieren kann, musst du noch im Objektinspektor die Option ReadOnly vom Memo auf true stellen.

So nun kommen wir zum Quelltext. Damit du meinen übernehmen kannst musst du erst dein Edit für die IP zu EdIP umbennen, dein Edit für den Port zu EdPort, dein Edit für den Nicknamen zu EdNick, dein Memo zum senden MemoSend und dein Memo zum empfangen MemoReceive. Als erstes gehst du in die OnClick-Procedure des Buttons zum Verbinden. Dort schreibst du folgendes hinnein:

begin
  ClientSocket1.Host:=EdIP.Text; //Die IP oder der Hostname wird festgelegt
  ClientSocket1.Port:=StrToInt(EdPort.Text); //Der Port wird festgelegt
  ClientSocket1.Open; //Verbindung zum Server wird hergestellt
end;

Nun zum empfangen. Du gehst wieder in die Formularansicht und wählst das Erreignis OnRead vom ClientSocket aus, indem du einen doppelklick in das dahinterstehende Feld machst. Nun bist du wieder in der Codeansicht. Dort schreibst du folgendes:

var
  msg: String;
begin
  msg:=Socket.ReceiveText; //Der Empfangene Text wird in der Variable msg gespeichert
  MemoReceive.Lines.Add(msg); //Die Nachricht wird in das Memo eingefügt
end;

Jetzt kommen wir noch zum Senden. Dafür fügst du folgendes in die Prozedure des Sende-Buttons ein:

 
var
  msg: String;
begin
  msg:=MemoSend.Text; //Text zum Senden wird in "msg" gespeichert
  msg:='Neue Nachricht von '+EdNick.Text+' : '+msg; //Hinzufügen von Nickname
  ClientSocket1.Socket.SendText(msg); //Senden der Nachricht
  MemoSend.Clear;
end;

Um Fehler vorzubeugen, deaktiveren wir den Button zum Senden, wenn keine Verbindung zum Server besteht, indem wir das Ereigniss OnDisconnect des ClientSockets auswählen und wieder in die Codeansicht springen. Dort geben wir dann folgendes ein:

begin
  BtnSend.Enabled:=false; //Deaktiviert den Button "BtnSend"
end;

Damit wir aber auch eine Nachricht senden können, wenn eine Verbindung zum Server besteht, müssen wir bei der Procedure des Ereignisses OnConnect vom ClientSocket den Button wieder aktivieren, indem wir folgendes an dieser Stelle eingeben:

 
begin
  BtnSend.Enabled:=true; //Aktiviert den Button "BtnSend"
end;

Weil beim Start des Programms noch keine Verbindung besteht müssen wir außerdem die Eigenschaft Enabled vom Button zum Senden auf false stellen.

Das wars eigentlich schon vom Client.

2.2 Der Server

Dazu erstellst du ein neues Projekt und ziehst diesmal aber die Komponente TServerSocket auf dein Formular. Jetzt müssen wir erst einen Port festlegen. Dies tun wir indem wir in der Eigenschaft "Port" einen beliebigen Port eintragen. Ich nehme hier 4567. Anschließend wählst du das Ereignis OnClientRead aus und machst wieder einen Doppelklick um in die Codeansicht zu gelangen. Dort schreibst du folgendes:

var
  msg: String;
  i : Integer;
begin
  msg:= Socket.ReceiveText; //Empfangene Nachricht wird in "msg" gespeichert
  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
    //Die Nachricht wird an alle verbundenen Clients gesendet
    ServerSocket1.Socket.Connections[i].SendText(msg);
end;

Jetzt starten wir noch den Server bei FormCreate, indem wir ServerSocket.Open; ausführen.

Das wars schon. Nun hast du deinen Chat!

 

3. Kurze Bedienungsanleitung

 

Nehmen wir an, wir haben ein Netzwerk das aus 3 Rechnern A, B, C besteht. Das Serverprogramm startet auf Rechner A mit der IP 192.168.0.1. Auf B und C müssen dann die Clients so eingerichtet weren, dass Sie zu dieser IP verbinden können. Es ist auch möglich mehrere Clients auf dem gleichen PC, sogar auf dem PC, auf dem der Server läuft, zu starten.

Sollte kein Netzwerk vorhanden sein, so kann man auch zu Testzwecken 2 mal den Client sowie den Server am gleichen Rechner starten und man gibt 127.0.0.1 als IP ein.

Viel Spaß beim chatten ;)


Da das Kommentarmodul dieser Seite zur Zeit neu überarbeitet werden muss, sendet bitte alle Fragen, Anregungen oder Probleme mit Betreff zu welchem Thema es sich handelt an folgende Mailadresse:



www.marco-hetzel.de
www.delphi-lernen.de
www.lazarus-lernen.de

© 2006-2019 by Marco Hetzel , last modified 01.11.2018, 11:28

(* Unterstützung dient der Aufrechthaltung laufender Kosten für dieses Projekt.)