![]() |
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 ? |
Re: probleme mit sockets
ja ich.
Man kann das lösen indem man die Fehler abstellt im onerror Bereich Errorcode := 0; |
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. ;) |
Re: probleme mit sockets
so das ist der client
Delphi-Quellcode:
und das der server
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;
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; |
Re: probleme mit sockets
weiss niemand, wie man dieses problem lösen könnte ?
|
Re: probleme mit sockets
Als potentielle Fehlerquelle fällt mir spontan nur das auf.
Delphi-Quellcode:
Wenn nachricht = '' ist dürfte es krachen.
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; Ich würde beim Server Haltepunkte setzen, und zwar in ServerSocket1ClientRead, ServerSocket1ClientDisconnect und ServerSocket1ClientError, den Client disconnecten und dann mal schauen ... |
Re: probleme mit sockets
Oder mal mit try .. ecxept .. end arbeiten.
Florian |
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 10:55 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