![]() |
Chat - Server + Client - Verbinden !?
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 :lol: ) 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 |
Re: Chat - Server + Client - Verbinden !?
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] |
Re: Chat - Server + Client - Verbinden !?
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. |
Re: Chat - Server + Client - Verbinden !?
Kannst dir ja mal
![]() Der Source ist auch downloadbar, da kannst du nachschauen, wie da das Login funktioniert. |
Re: Chat - Server + Client - Verbinden !?
Zitat:
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:
[/edit] |
Re: Chat - Server + Client - Verbinden !?
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 |
Re: Chat - Server + Client - Verbinden !?
Zitat:
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: ![]() ![]() |
Re: Chat - Server + Client - Verbinden !?
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 ;) |
Re: Chat - Server + Client - Verbinden !?
Zitat:
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" ... |
Re: Chat - Server + Client - Verbinden !?
ä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 ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz