AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit Netzwerkchat: Absturz bei reconnect
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Netzwerkchat: Absturz bei reconnect

Ein Thema von TheConsul · begonnen am 30. Jan 2008 · letzter Beitrag vom 9. Feb 2008
Antwort Antwort
TheConsul

Registriert seit: 30. Jan 2008
2 Beiträge
 
#1

Problem mit Netzwerkchat: Absturz bei reconnect

  Alt 30. Jan 2008, 17:04
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:
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.
Client:

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.
  Mit Zitat antworten Zitat
TheConsul

Registriert seit: 30. Jan 2008
2 Beiträge
 
#2

Re: Problem mit Netzwerkchat: Absturz bei reconnect

  Alt 9. Feb 2008, 17:18
danke fuer die zahlreichen antworten
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Problem mit Netzwerkchat: Absturz bei reconnect

  Alt 9. Feb 2008, 19:00
Keine ahnung ob das etwas mit deinem Problem zu tun hat, aber sollte das
Delphi-Quellcode:
with AContext.Connection.IOHandler do
    LLine := ReadLn;
     LCmd := Fetch(LLine);
Operation := strtoint(LCmd[1]);
nicht eigentlich so aussehen:
Delphi-Quellcode:
with AContext.Connection.IOHandler do
  begin
    LLine := ReadLn;
    LCmd := Fetch(LLine);
    Operation := strtoint(LCmd[1]);
  end;
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem mit Netzwerkchat: Absturz bei reconnect

  Alt 9. Feb 2008, 19:04
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:47 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