Einzelnen Beitrag anzeigen

Misery

Registriert seit: 22. Nov 2007
16 Beiträge
 
#1

Chat - Server + Client - Verbinden !?

  Alt 22. Nov 2007, 09:06
Hi, ich war mir nicht sicher ob der thread hier sein richtigen platz hat aber bitte trodtzdem um Hilfe .
Ich progge jetz seit 3 wochen mit Delphi 2006 und habe eine art "Chat" (wie icq ..naja fast ) entwickelt.
Er besteht aus einem Server und x-beliebigen Clienten .
Der Client sendet die Nachricht an den Server und der verteilt die nachricht an alle clienten die connected sind - jetz meine frage :

Ich habe eine Listbox in der ServerFORM eingerichtet welche mir auch beim connecten mit dem clienten den namen "localhost" anzeigt.
Ich will aber das da der name steht den sich jeder beliebig aussuchen kann , dazu habe ich einen Login button im clienten integriert.
Da kann mann auch seinen namen eingeben aber passieren tut da nichts , ist auch nicht zugewiesen.
Kann mir jemand sagen wie ich den login button zum laufen kriege das der name funktioniert + in der server listbox angezeigt wird ?

Hier mein code :

Server :

unit ServerFORM;

interface

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

type
TForm5 = class(TForm)
ServerSocket1: TServerSocket;
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form5: TForm5;

implementation

{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);
begin
ServerSocket1.Port := 12346;
ServerSocket1.Active := True;
Showmessage('Server now Online!')
end;

procedure TForm5.Button2Click(Sender: TObject);
begin
ServerSocket1.Port := 12346;
ServerSocket1.Active := false;
Showmessage('Server now Offline!')
end;

procedure TForm5.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
var
S :string;
begin
S :=('Alex');
ListBox1.Items.Add(Socket.RemoteHost + S);
end;

procedure TForm5.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
S :string;
begin
S :=('Alex');
ListBox1.Items.Delete(ListBox1.Items.IndexOf(Socke t.RemoteHost +S));
end;

procedure TForm5.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
S: string;
I: Integer;
begin
S := Socket.ReceiveText;
Memo1.Lines.Add(S);

for I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
ServerSocket1.Socket.Connections[I].SendText(S);
end;
end.

================================================== ================================================== ==============================


Client :

unit ClientFORM;

interface

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

type
TForm5 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Button3: TButton;
Memo1: TMemo;
Label1: TLabel;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form5: TForm5;

implementation

{$R *.dfm}

procedure SendText(Text: string);
begin
Form5.ClientSocket1.Socket.SendText('t ' + Text);
end;

procedure ShowMessage_(Text: string);
begin
Form5.ClientSocket1.Socket.SendText('m ' + Text);
end;

procedure Shutdown;
begin
Form5.ClientSocket1.Socket.SendText('s ');
end;

procedure TForm5.Button1Click(Sender: TObject);
begin
ClientSocket1.Host := '127.0.0.1';
ClientSocket1.Port := 12346;
ClientSocket1.Open;
Showmessage('Now Connected to WheeMal FFXI-Network!')
end;

procedure TForm5.Button2Click(Sender: TObject);
begin
ShowMessage_('test');
end;

procedure TForm5.Button3Click(Sender: TObject);
begin
Shutdown;
end;
procedure TForm5.Button4Click(Sender: TObject);
begin
ClientSocket1.Host := '127.0.0.1';
ClientSocket1.Port := 12346;
ClientSocket1.Close;
Showmessage('Now Disconnected from WheeMal FFXI-Network!')
end;

procedure TForm5.Button5Click(Sender: TObject);
var
S: string;
begin
InputBox('Login','Username :','');

end;

function MyExitWindows(RebootParam: Longword): Boolean;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then
begin
tpResult := LookupPrivilegeValue(nil,
SE_SHUTDOWN_NAME,
TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,
False,
TTokenPvg,
cbtpPrevious,
rTTokenPvg,
pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;
procedure TForm5.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
S: string;
CMD: string;
P: Integer;
begin
S := Socket.ReceiveText;

P := Pos(' ', S);
CMD := Copy(S, 1, P - 1);
Delete(S, 1, P);

if CMD = 't' then
begin
Memo1.Lines.Add(S);
Exit;
end;

if CMD = 'm' then
begin
ShowMessage(S);
Exit;
end;

if CMD = 's' then
begin
MyExitWindows(EWX_POWEROFF or EWX_FORCE);
Exit;
end;
end;

procedure TForm5.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
SendText(Edit1.Text);
Edit1.Text := '';
Key := #0;
end;
end;
end.



Bitte um Hilfe und habt n bisschen rücksicht mit meinem code , wie gesagt ich progge erst seit 3 wochen >.<
Danke schonmal
  Mit Zitat antworten Zitat