AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Chat mit den Sockets

Chat mit den Sockets

Ein Thema von Berlinermauer · begonnen am 3. Okt 2007 · letzter Beitrag vom 3. Okt 2007
Antwort Antwort
Berlinermauer

Registriert seit: 3. Okt 2007
Ort: 0x0000
213 Beiträge
 
Delphi 7 Personal
 
#1

Chat mit den Sockets

  Alt 3. Okt 2007, 09:28
Also :

Ich habe einen Chat mit den Sockets ...

die chat übertragung ist nicht p2p sondern peer 2 Server 2 Peer ...

sprich Herr a schreibt "hi" zu Herr b ... diese nachricht "hi" wird dann an den Server gesendet und dieser Sendet die dann an Herr B ...

Das dies geht muss der Server auch wissen welche Connection ID der Herr B hat ...

Der Herr B sendet beim Starten des Clients ne Nachricht an den Server das er on ist und seine ip ....


Wie kann ich die ID rausfinden, sodass die nachricht weitergeleitet wird ? so würde die der Server bekommen und dir würde dort vergammeln ... sprich : Ich brauche etwas wo die ganzen Usernamen und ihre IDS gespeichert sind ...

Hier mal die Sources :

Server:

Delphi-Quellcode:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ServerSocket1: TServerSocket;
    Label1: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;
  Stop: Integer;
  messagefromclient: String;
  ip_7: String;
  ip_98: String;
  ip_3: String;
  ip_2: String;



implementation

{$R *.dfm}



procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket1.Active := False;
ShowMessage('Server Stopped!');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Active := True;
ShowMessage('Server Started');
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Label1.Caption := 'Verbindung eines Clienten Bekommen ... ';
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
messagefromclient := ServerSocket1.Socket.ReceiveText;
CUTIP := Pos('/login', messagefromclient);
if CUTIP <> 0 then
Delete(CUTIP, 1,7);

if cutip = '192.168.0.7then begin
ServerSocket1.Socket.SendText('Chat gestartet!');
end
else begin
If cutip = '192.168.0.7then begin
ip_7 := ;// Hier bekommt die variable die ID ZUGEWIESEN
ShowMessage(ip_7);
end
else begin
If cutip = '192.168.0.98then begin
ip_7 := ;// Hier bekommt die variable die ID ZUGEWIESEN
ShowMessage(ip_98);
end
else begin
If MessageFromClient = '192.168.0.3then begin
ip_7 := ;// Hier bekommt die variable die ID ZUGEWIESEN
ShowMessage(ip_3);
end
else begin
If MessageFromClient = '192.168.0.2then begin
ip_7 := ;// Hier bekommt die variable die ID ZUGEWIESEN
ShowMessage(ip_2);
end
else begin
Serversocket1.Socket.SendText (messagefromclient);
End;
End;
end.
Client
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;

type
  TForm1 = class(TForm)
    ClientSocket: TClientSocket;
    Nicklbl: TLabel;
    Nickname: TEdit;
    nickbut: TButton;
    chatlog_memo: TMemo;
    Nachrichted: TEdit;
    sendenbut: TButton;
    connectbut: TButton;
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    procedure nickbutClick(Sender: TObject);
    procedure connectbutClick(Sender: TObject);
    procedure sendenbutClick(Sender: TObject);
    procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocketConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  nicknamevar: string;
  str: string;
  ip: String;
  MEINEIP: String;

implementation

{$R *.dfm}

procedure TForm1.nickbutClick(Sender: TObject);

begin

//nickbut heißt unser "Nickname setzen" Button
// NickName heißt unser Edit-Feld
//nicklbl ist der "Nickname" Label


nickbut.Enabled := false;
Nickname.Enabled := false;
nicklbl.Enabled := false;
nicknamevar := nickname.Text;

//Die restlichen Buttons/Memos/Edits aktivieren

chatlog_memo.Enabled := true;
Edit1.Enabled := True;
Connectbut.Enabled := True;
end;

procedure TForm1.sendenbutClick(Sender: TObject);
begin
//sendenbut heißt unser "Senden" Button

//nachrichted heißt unsere "Deine Nachricht..." Box

//chatlog_memo ist unsere "Chat-Log" Memo

if nachrichted.Text = '/helpthen begin
Chatlog_memo.Lines.Add('SERVER: Command Listing Started !');
Chatlog_memo.Lines.Add('/exit : Beende die Sitzung mit dem Partner');
Chatlog_Memo.Lines.Add('/ip [Address] : Verbinde mit Folgender Client IP');
Chatlog_Memo.Lines.Add('SERVER: Command Listing Stopped');
end
else begin
try
chatlog_memo.Lines.Add(nicknamevar + ' sagt: ' + nachrichted.Text);
ClientSocket.Socket.SendText(nicknamevar + ' sagt: ' + nachrichted.Text);
except
chatlog_memo.Lines.Add('Server Error : Verbindung zum Server gescheitert ! entweder blockt eine Firewall den Port oder er ist Belegt oder der Server ist Offline');
ShowMessage('Error ! Verbindung zum Server gescheitert ! entweder blockt eine Firewall den Port oder er ist Belegt oder der Server ist Offline');
end;
end;
nachrichted.Text := '';
end;

procedure TForm1.connectbutClick(Sender: TObject);
begin
//connectbut heißt unser "Connect" Button
//EDIT1 heißt unsere "127.0.0.1" Edit-Box
//ClientSocket heißt unser TClientSocket
sendenbut.Enabled := True;
Nachrichted.Enabled := True;
If Edit1.Text = 'Elkethen
IP := '192.168.0.7';
If Edit1.Text = 'Michaelthen
IP := '192.168.0.2';
IF Edit1.Text = 'Nicolathen
IP := '192.168.0.98';
IF Edit1.Text = 'Marcthen
IP := '192.168.0.3';

ClientSocket.Host := '192.168.0.3';
ClientSocket.Port := 1994;

//Verbindung aufbauen:
try
ClientSocket.Active := true;
ClientSocket.Socket.SendText('/ip ' + IP);
except
chatlog_memo.Lines.Add('Server Error : Verbindung zum Server gescheitert ! entweder blockt eine Firewall den Port oder er ist Belegt oder der Server ist Offline');
ShowMessage('Error ! Verbindung zum Server gescheitert ! entweder blockt eine Firewall den Port oder er ist Belegt oder der Server ist Offline');
end;
chatlog_memo.Lines.Delete(1);
Chatlog_memo.Lines.Add('Herzlich Willkommen in FAM-ICQ Sie sind verbunden mit dem Server 192.168.0.3');
ChatLog_Memo.Lines.Add('Tippen Sie /help ein um Die Kommandos zu sehen !')
end;

procedure TForm1.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin

//in str speichern wir den ankommenden String

//und geben es dann in der memo aus.

str := ClientSocket.Socket.ReceiveText;
If str = '/exitthen begin
ShowMessage('Der Partner hat die verbindung Beendet ... bitte starten sie FAMICQ Neu !');
Form1.Close;
end
else begin
chatlog_memo.Lines.Add(str);
end;
end;
procedure TForm1.ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
begin

//adresselbl ist das Label "Adresse:"

Edit1.Enabled := false;
connectbut.Enabled := false;
ShowMessage('Sie Wurden Verbunden !');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket.Socket.SendText('/login' + MEINEIP);
end;

end.
Marc S.
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Chat mit den Sockets

  Alt 3. Okt 2007, 10:29
Willkommen in der DP!

Zu dem Thema kann ich die Tutorials von Narses aus der Delphi Library empfehlen, die haben mir sehr geholfen: [link]. Eine Suche nach Chat tutorial hier in der DP hätte dir das hier gezeigt.
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#3

Re: Chat mit den Sockets

  Alt 3. Okt 2007, 10:36
Bevor sich hier auch jemand fragt, was nun eigentlich das Problem ist:
http://forum.dsdt.info/viewtopic.php?t=34407

mfg

Christian

P.S.: Was ist eigentlich so schwer daran, Crossposts zu verlineken?
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:38 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