AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Chat - Server + Client - Verbinden !?

Ein Thema von Misery · begonnen am 22. Nov 2007 · letzter Beitrag vom 22. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2   
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
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Chat - Server + Client - Verbinden !?

  Alt 22. Nov 2007, 09:12
a) Es passt ehr ins Forum "Internet / LAN / ASP.NET"
b) Für Delphi-Code im Forum nutze doch bitte: [delphi] ... Code ... [/delphi]
c) Informiere dich mal über Einrücken

d) Du kannst entweder den Namen vom Clienten vor die eigentliche Nachricht hängen lassen, was einfach ist und für deinen Chat ausreichen sollte ...
e) oder du musst beim Login den Namen an den Server senden, der diesen dann verwaltet.

[edit]
f) TServerSocket und TClientSocket sind veraltet und man sollte Indy-Komponenten nehmen. Wie bist du bei D2006 da überhaupt ran gekommen?
[/edit]
Chris
  Mit Zitat antworten Zitat
Misery

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

Re: Chat - Server + Client - Verbinden !?

  Alt 22. Nov 2007, 09:19
Ja wie gesagt bin noch nich so lange dabei

e) würde mich interressieren , also login an den server senden / verwalten /anzeigen ...
Könntest du mir evtl. zeigen wie das geht ?



PS : D2006 hab ich die Sockets nachinstalliert weil die standard mässig wohl nicht mehr benutzt werden.
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

Re: Chat - Server + Client - Verbinden !?

  Alt 22. Nov 2007, 09:20
Kannst dir ja mal meinen IRC-Server anschauen. Der arbeitet mit dem IRC-Protokoll. Man kann sich mit jedem gängigen IRC-Clienten (mIRC, Miranda etc.) verbinden.
Der Source ist auch downloadbar, da kannst du nachschauen, wie da das Login funktioniert.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Chat - Server + Client - Verbinden !?

  Alt 22. Nov 2007, 09:25
Zitat von Misery:
e) würde mich interressieren , also login an den server senden / verwalten /anzeigen ...
Könntest du mir evtl. zeigen wie das geht ?
Könnte ich. Allerdings wäre es, wenn man es halbwegs anständig machen möchste, nicht in zwei Code-Zeilen erledigt ...
Zum experimentieren fang doch erst mal klein, mit der einfacheren Methode an, bist du mehr Erfahrung hast um es dann (fast) selber so machen zu können.

Aber wie gesagt, die genutzten Komponenten sind bei D2006 zwar noch dabei (sind sie?), aber verwenden sollte man sie nicht. Darum frag ich mich wie du als Anfänger auf diese Idee kommst ...
(Auch das MyExitWindows sieht mir seeeehr nach Copy & Paste aus ...)

[edit]
Zitat von Misery:
PS : D2006 hab ich die Sockets nachinstalliert weil die standard mässig wohl nicht mehr benutzt werden.
Das erklärt einiges ... aber warum willst du die gerade nutzen? Nimm Indy ...
[/edit]
Chris
  Mit Zitat antworten Zitat
Misery

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

Re: Chat - Server + Client - Verbinden !?

  Alt 22. Nov 2007, 09:31
Wie ich darauf komme ? Ganz einfach ich bin am Arbeiten ich lerne grade IT-Systemelektroniker in einem Betrieb und spezifiziere mich im mom auf Programmierung mit Delphi - Wie ich auf die sockets komme ? Hilfe von unserm Main Programmierer
und das mit dem shutdown war ne bitte von mir an ihn als test also kein copy/paste, selbst geschrieben allerdings auch nicht.

Da unser main prog. aber urlaub hat hab ich ausser meine bücher + inet nich viel hilfe hier und wollte deshalb mal das forum antesten. Ich benutze die sockets weil ich mich mit Indy noch garnicht befasst hab und daher kein plan davon hab ( noch nich )
ich versuche mal die einfache methode , ich kanns ja nacher immernoch erweitern.
Danke
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Chat - Server + Client - Verbinden !?

  Alt 22. Nov 2007, 09:40
Zitat von Misery:
Da unser main prog. aber urlaub hat hab ich ausser meine bücher + inet nich viel hilfe hier und wollte deshalb mal das forum antesten. Ich benutze die sockets weil ich mich mit Indy noch garnicht befasst hab und daher kein plan davon hab ( noch nich )
ich versuche mal die einfache methode , ich kanns ja nacher immernoch erweitern.
Danke
Dann nutze das Internet auch Es gib sicherlich dutzende Tutorials im Netz, Google hilft ^^
Und wie gesagt, Indy. Wenn du jetzt mit den alten Kompos anfängst, musst du nachher nochmal alles schreiben, neu lernen, etc ...

Hier mal zwei Links die dir vlt. helfen:
http://www.dsdt.info/tutorials/indy/
http://www.delphipraxis.net/internal_redirect.php?f=11
Chris
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

Re: Chat - Server + Client - Verbinden !?

  Alt 22. Nov 2007, 09:42
Anmerkung:
die Unit ScktComp ist auch bei Delphi 2007 noch dabei (sicher nicht ohne Grund).
Ich verwende sie ja auch. Werden zwar erst zur Laufzeit erzeugt (also keine Komponenten in der Komponenten-Palette) und ich glaube, dass sie ein wesentlich stabileres Verhalten aufweisen als die Indys, die in Version 10 absolut schrottig geworden sind.
Man muss eben etwas mehr Code schreiben, das ist alles
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Chat - Server + Client - Verbinden !?

  Alt 22. Nov 2007, 09:50
Zitat von Progman:
Anmerkung:
die Unit ScktComp ist auch bei Delphi 2007 noch dabei (sicher nicht ohne Grund).
Ich verwende sie ja auch. Werden zwar erst zur Laufzeit erzeugt (also keine Komponenten in der Komponenten-Palette) und ich glaube, dass sie ein wesentlich stabileres Verhalten aufweisen als die Indys, die in Version 10 absolut schrottig geworden sind.
Man muss eben etwas mehr Code schreiben, das ist alles
Der Grund wird sein, dass alte Projekte, die damals mit den ScktComp's gemacht wurde, trotzdem noch funktionieren sollen. Eben so gut werden sie nicht ohne Grund nicht mehr von vorn herein installiert.

Ich persönlich habe bei den ScktComp's mehr Probleme festgestellt als bei Indy. Werden die ScktComp's überhaupt noch weiterentwickelt? Ich glaube nicht...
Und: Die ScktComp's können ja nur TCP (oder auch noch UDP?). Wenn man HTTP, UDP, FTP, usw. usw. nutzen will, ist man damit "verloren" ...
Chris
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#10

Re: Chat - Server + Client - Verbinden !?

  Alt 22. Nov 2007, 09:52
ähm.....ich rede von einer Verwendung für ein Chat-Programm, da braucht man nur TCP. Ich meine das nicht allgemein.
Der Verwendungszweck bestimmt, was man nimmt, jedenfalls bei mir
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 11:24 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