![]() |
Problem mit Netzwerkchat: Absturz bei reconnect
Hi ich programmiere gerade ein Chat-Programm.
Ich sitze jetzt schon eine Weile an einem Problem: Fall1: Ich connecte mich auf den Server (Willkommensnachicht erhalten), disconnecte mich und connecte wieder. Kein Problem tritt auf. Fall2: Wie in 1 ich sende diesesmal allerdings eine nachicht, die an alle übermittelt wird, nach dem reconnect stürzt der Client allerdings ab! Und der Server sobald ich ihn neustarte. Ich wäre dankbar für eure Hilfe Hier der Source: Server:
Delphi-Quellcode:
Client:
unit Chat;
interface uses Controls, Forms, Classes, IdBaseComponent, IdComponent, IdTCPServer, IdContext, SysUtils, IdCustomTCPServer, StdCtrls,IdGlobal, ExtCtrls; type TForm1 = class(TForm) TCPServ: TIdTCPServer; Button1: TButton; ListBox1: TListBox; Button2: TButton; procedure OnExecute(AContext: TIdContext); procedure AnAlleSenden (LLine:string); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Connect(AContext: TIdContext); procedure Disconnect(AContext: TIdContext); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.AnAlleSenden (LLine:string); var i:integer; begin //for i:=0 to TCPServ.Contexts.LockList.Count -1 do //TIdContext(TCPServ.Contexts.LockList.Items[i]).Connection.IOHandler.writeln('>>'+LLine); with TCPServ.contexts.LockList do try for i := 0 to Count-1 do begin TIdContext(TCPServ.Contexts.LockList.Items[i]).Connection.IOHandler.writeln('>>'+LLine); end; finally TCPserv.Contexts.UnlockList; end; end; procedure TForm1.OnExecute(AContext: TIdContext); var Operation,i:integer; var LLine,lcmd:string; begin with AContext.Connection.IOHandler do LLine := ReadLn; LCmd := Fetch(LLine); Operation := strtoint(LCmd[1]); Case Operation of 0: AnAlleSenden('<Server>:ClientConnected!'); 1: AnAlleSenden(copy(LCmd,2,length(LCmd))); 2: begin AContext.Connection.Disconnect;listbox1.items.add('Client disconnected');end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin TCPServ.Active:=true; listbox1.Items.add('Server gestartet!'); end; procedure TForm1.Button2Click(Sender: TObject); begin TCPServ.Active:=false; listbox1.Items.add('Server gestoppt!'); end; procedure TForm1.Connect(AContext: TIdContext); begin AContext.Connection.IOHandler.writeln ('Willkommen!'); end; procedure TForm1.Disconnect(AContext: TIdContext); begin AContext.Connection. end; end.
Delphi-Quellcode:
unit Chat2;
interface uses Controls, Forms, Classes, IdBaseComponent, IdComponent, IdTCPServer, IdContext, SysUtils, IdCustomTCPServer, StdCtrls,IdGlobal, ExtCtrls, IdTCPConnection, IdTCPClient; type TForm1 = class(TForm) Edit1: TEdit; ListBox1: TListBox; Button1: TButton; Edit2: TEdit; Edit3: TEdit; Button2: TButton; TCPClient: TIdTCPClient; Button3: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject); begin TCPClient.Host:=Edit2.Text; TCPClient.Connect; if TCPClient.Connected then begin listbox1.items.Add('Verbunden zu '+Edit2.text); Listbox1.Items.Add(TCPClient.IOHandler.ReadLn); end; end; procedure TForm1.Button1Click(Sender: TObject); begin TCPClient.IOHandler.WriteLn('1'+Edit1.text); Listbox1.Items.Add(TCPClient.IOHandler.ReadLn); end; procedure TForm1.Button3Click(Sender: TObject); begin TCPClient.IOHandler.WriteLn('2'); TCPClient.Disconnect; end; end. |
Re: Problem mit Netzwerkchat: Absturz bei reconnect
danke fuer die zahlreichen antworten :cry:
|
Re: Problem mit Netzwerkchat: Absturz bei reconnect
Keine ahnung ob das etwas mit deinem Problem zu tun hat, aber sollte das
Delphi-Quellcode:
nicht eigentlich so aussehen:
with AContext.Connection.IOHandler do
LLine := ReadLn; LCmd := Fetch(LLine); Operation := strtoint(LCmd[1]);
Delphi-Quellcode:
Ich kann dir nur raten deinen Quelltext mal etwas besser zu formatieren und zu kommentieren, denn dadurch sieht man auch schon mal den einen oder anderen Fehler. Kommentare im Quelltext würde es für andere einfacher machen die Funktionen zuordnen zu können. Du weißt vielleicht was Button1, 2 und 3 machen sollen, aber ein anderer rätselt unter Umständen erstmal.
with AContext.Connection.IOHandler do
begin LLine := ReadLn; LCmd := Fetch(LLine); Operation := strtoint(LCmd[1]); end; |
Re: Problem mit Netzwerkchat: Absturz bei reconnect
wie bereits erwähnt ist ein ordentlich formatierter Quelltext notwendig damit andere auch schnell durchsehen. Solange du den Styleguide ingorierst ist es nicht verwunderlich das du keine Antworten bekommst. Man hat einfach den Eindruck das derjenige der die Frage gestellt hat sich nicht mal die Zeit nimmt den Quelltext zu formatieren aber erwartet, dass andere seinen quelltext anschauen und verstehen wozu sie ja selbst erstmal den Quelltext in den meisten fällen formatieren müssen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 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