Thema: Delphi Fragen zu Chat.

Einzelnen Beitrag anzeigen

MisterC

Registriert seit: 14. Feb 2012
11 Beiträge
 
Delphi 7 Personal
 
#1

Fragen zu Chat.

  Alt 15. Feb 2012, 15:59
Ich habe wieder ma eine Frage.
Unzwar Ich habe wie vllt.mansche wissen einen Chat Programmiert.Jetzt Würde oich aber dieses noch ein Wenig ausbauen.In folgenden Punkten:

Wichtig-OnlineListe,

Wichtig-Nachricht an bestimmte User die online sind

Nicht so Wichtig-(Geht es die über ein Plugin zu regeln das alle 2 Minuten eine Meldung kommt das man sich im Forum anmelden soll.Und wenn man sich angemeldet hat ein Plugin bekommt das die Nachricht deinstalliert?)

Wichtig-Nickname(Bis jetzt )wird nur eine Ip angezeigt.

Wichtig-Server mit Passwort schützen(Im grunde habe ich den Chat für die Firma meines Vaters Programmiert.Daher will ich das sich nicht jeder einloggen kann.)

Hier die Codes des client und Servers.



Server:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Port: TEdit;
    GroupBox1: TGroupBox;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Senden: TEdit;
    User: TLabel;
    Server: TServerSocket;
    XPManifest1: TXPManifest;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerClientError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Userzahl:Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Server.Port:=strtoint(Port.Text);
Server.Active:=True;

Button1.Enabled:=False;
Button2.Enabled:=True;

Memo1.Lines.Add('Status: Server gestartet.');
Memo1.Lines.Add(Viel Spaß) ;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Server.Port:=strtoint(Port.Text);
Server.Active:=False;

Button1.Enabled:=True;
Button2.Enabled:=False;

Memo1.Lines.Add('Status: Server angehalten.');
sleep(600);

Memo1.Clear;
Memo1.Lines.Add('Chatserver v1.0 (by Fabian Cernota)');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('Server 1.0');
end;

procedure TForm1.Button4Click(Sender: TObject);
var i:Integer;
begin
for i := 0 to Server.Socket.ActiveConnections - 1 do
  Server.Socket.Connections[i].SendText('Nachricht vom Server: ' + Senden.Text);
Memo1.Lines.Add('Nachricht vom Server: ' + Senden.Text);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
Server.Active:=False;
Application.Terminate;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Server.Active:=False;

end;

procedure TForm1.ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' verbunden.');
Userzahl:=Userzahl +1;
User.Caption:='User: ' + inttostr(Userzahl);
end;

procedure TForm1.ServerClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + ' getrennt.');
Userzahl:=Userzahl -1;
User.Caption:='User: ' + inttostr(Userzahl);
end;

procedure TForm1.ServerClientError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
Memo1.Lines.Add('Status: Client ' + Socket.RemoteAddress + 'hat den Fehler: ' + inttostr(Errorcode));
Userzahl:=Userzahl -1;
User.Caption:='User: ' + inttostr(Userzahl);
end;

procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i:integer;
Nachricht:AnsiString;
begin
Nachricht:=Socket.RemoteAddress + ': ' + Socket.ReceiveText;
Memo1.Lines.Add(Nachricht);

for i := 0 to Server.Socket.ActiveConnections - 1 do
  Server.Socket.Connections[i].SendText(Nachricht);
end;

end.
Und des Clients

Delphi-Quellcode:
unit clientunit;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Host: TEdit;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    GroupBox1: TGroupBox;
    Memo1: TMemo;
    GroupBox2: TGroupBox;
    Senden: TMemo;
    Button3: TButton;
    Port: TEdit;
    Client: TClientSocket;
    XPManifest1: TXPManifest;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Client.Host :=Host.Text;
Client.Port:=Strtoint(Port.Text);
Client.Active :=True;

Button1.Enabled:=False;
Button2.Enabled:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Client.Host :=Host.Text;
Client.Port:=Strtoint(Port.Text);
Client.Active :=False;

Button1.Enabled:=True;
Button2.Enabled:=False;
end;

procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Status: verbunden mit: ' +Socket.RemoteAddress);
end;

procedure TForm1.ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('Status: getrennt von: ' +Socket.RemoteAddress);
end;

procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Client.Socket.SendText(Senden.Text);
end;

end.
Ihr würdet mir dabei sehr helfen alle die mir geholfen haben werden im serverprotokoll angezeigt (Solang erwünscht).

Falls ihr noch Screenshots braucht schreibt es mir.

Lg MisterC
Fabian

Geändert von r_kerber (16. Feb 2012 um 07:13 Uhr) Grund: Delphi-Tags gesetzt
  Mit Zitat antworten Zitat