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
 
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
 


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 00:39 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