Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi probleme mit sockets (https://www.delphipraxis.net/70682-probleme-mit-sockets.html)

Van HelF 2. Jun 2006 16:14


probleme mit sockets
 
Hallo,
ich habe ein chatprogramm, mithilfe der sockets von delphi6 geschrieben.
mein problem ist, dass manchmal, wenn ein client dis/connected, der server einen stack overflow bekommt, und sich dann beendet.
kennt jemand zufällig dieses problem ?

pacman1986 2. Jun 2006 16:21

Re: probleme mit sockets
 
ja ich.
Man kann das lösen indem man die Fehler abstellt im onerror Bereich Errorcode := 0;

Balu der Bär 2. Jun 2006 16:23

Re: probleme mit sockets
 
Ohja, den Fehler unterdrücken ist wirklich sehr schlau. :roll:

@Van HelF: Ohne ein bisschen Code wird der keiner bei deinem Problem helfen können. ;)

Van HelF 2. Jun 2006 16:32

Re: probleme mit sockets
 
so das ist der client
Delphi-Quellcode:
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  memo1.Lines.Add('Verbunden mit : '+clientsocket1.Socket.RemoteHost+' (IP: '+clientsocket1.Socket.RemoteAddress+')');
  connected:=true;
  history('################ '+datetostr(now)+' Session gestartet ################');
  history('');
  send_version;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
var fehlerbuffer:integer;
begin
  fehlerbuffer:=errorcode;
  errorcode:=0;
  if fehlerbuffer<>10061 then memo1.Lines.Add('Es ist ein Fehler aufgetreten. [Code: '+inttostr(fehlerbuffer)+']')
    else memo1.Lines.Add('Server zur Zeit nicht erreichbar ...');


  if fehlerbuffer=10049 then
    memo1.Lines.Add('Bitte wiederholen Sie den Vorgang ...');
   
  clientsocket1.Active:=false;
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  memo1.Lines.Add('Verbindung zum Server wurde unterbrochen ...');
  connected:=false;
  form2.Visible:=false;
  form2.ListBox1.Clear;
  form2.ListBox2.Clear;
  form2.ListBox3.Clear;
  form2.ListBox4.Clear;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var nachr:string;
    senden:boolean;
begin
  nachr:=socket.ReceiveText;
  entschl(xchar,nachr);
  check_sp(nachr,senden);
  if senden=true then
  begin
    memo1.Lines.Add(nachr);
    status(nachr);
    history(nachr);
  end;
end;
und das der server
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var wtext:string;
begin
  send_text('['+thetime+' Server Message ] : Ein Client hat sich angemeldet ...',-1);
  memo1.Lines.Add('['+thetime+'] : Ein Client hat sich angemeldet ...');
  inc(clients);
  label3.Caption:=inttostr(clients);
  wtext:='Willkommen auf dem Loos - Teck KmsG Server Lite 0.4 Beta / '+inttostr(clients)+' Client(s) online ...';
  verschl(wtext,xchar,wtext);
  serversocket1.Socket.Connections[clients-1].SendText(wtext);
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  send_text('['+thetime+' Server Message ] : Ein Client hat sich abgemeldet ...',0);
  memo1.Lines.Add('['+thetime+'] : Ein Client hat sich abgemeldet ...');
  dec(clients);
  label3.Caption:=inttostr(clients);
end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
var errbuffer:integer;
begin
  errbuffer:=errorcode;
  errorcode:=0;
  memo1.Lines.Add('FEHLER : '+inttostr(errbuffer));
  stop:=true;
  panel1.Visible:=true;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var nachricht:string;
begin
  timer2.Enabled:=true;
  nachricht:=socket.ReceiveText;
  nachricht:='['+thetime+' '+copy(nachricht,2,length(nachricht));
  send_text(nachricht,0);
end;

Van HelF 5. Jun 2006 13:19

Re: probleme mit sockets
 
weiss niemand, wie man dieses problem lösen könnte ?

guste 5. Jun 2006 15:44

Re: probleme mit sockets
 
Als potentielle Fehlerquelle fällt mir spontan nur das auf.

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var nachricht:string;
begin
  timer2.Enabled:=true;
  nachricht:=socket.ReceiveText;
  nachricht:='['+thetime+' '+copy(nachricht,2,length(nachricht));
  send_text(nachricht,0);
end;
Wenn nachricht = '' ist dürfte es krachen.


Ich würde beim Server Haltepunkte setzen, und zwar in ServerSocket1ClientRead, ServerSocket1ClientDisconnect und ServerSocket1ClientError, den Client disconnecten und dann mal schauen ...

Zacherl 5. Jun 2006 15:48

Re: probleme mit sockets
 
Oder mal mit try .. ecxept .. end arbeiten.

Florian

Van HelF 5. Jun 2006 16:41

Re: probleme mit sockets
 
try except hilft leider auch nicht.
der server hängt sich auf, und in der ereignis ansicht sieht man , wie sich , aus welchen gründen auch immer, endlos clients an oder abmelden,
irgendwann, beendet sich der server dann.
die probleme treten eigentlich hauptsächlich im WLAN auf, liegt vl. an der höheren latenz.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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