![]() |
idTCPClient EAccessViolation beim Verlassen der Prozedur
Morgen Zusammen,
ich möchte eine idTCPServer -idTCPClient Umgebung entwickeln. Diese soll Verschlüsselt sein und der Transfer soll komprimiert werden. Nun habe ich folgendes Problem, der Verbinungsaufbau zum Server funktioniert seltsamerweise erst beim zweiten Verbindungsversuch. Beim ersten Versuch gibt immer den Fehler:
Code:
Bei der zweiten Verbindung erhalte ich beim Verlassen der Prozedur noch eine EAccessViolation, welche ich mit
EIdOSSLConnectError mit Meldung 'Error connecting with SSL.
EOF was observed that violates the protocol' dem Debugger nicht ausmachen kann, weil die Prozedur ja schon beendet ist. Jedoch steht an in der CPU Ansicht:
Code:
Kann einer von Euch erkennen wo mein Fehler liegt, oder wo ich suchen sollte?
757DB727 C9 leave
Danke und Gruß Dirk
Delphi-Quellcode:
// Aus dem Formular des Clienten entnommen
object IdTCPClient1: TIdTCPClient Intercept = IdCompressionIntercept1 IOHandler = IdSSLIOHandlerSocketOpenSSL1 ConnectTimeout = 360000 Host = '127.0.0.1' IPVersion = Id_IPv4 Port = 211 ReadTimeout = -1 Left = 384 Top = 40 end object IdCompressionIntercept1: TIdCompressionIntercept CompressionLevel = 0 Left = 480 Top = 192 end object IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL Destination = '127.0.0.1' Host = '127.0.0.1' Intercept = IdCompressionIntercept1 MaxLineAction = maException Port = 211 DefaultPort = 211 SSLOptions.Method = sslvSSLv23 SSLOptions.SSLVersions = [sslvSSLv2, sslvSSLv3, sslvTLSv1] SSLOptions.Mode = sslmUnassigned SSLOptions.VerifyMode = [] SSLOptions.VerifyDepth = 0 Left = 464 Top = 80 end object LbMD51: TLbMD5 Left = 400 Top = 152 end
Delphi-Quellcode:
// Die benötigten Records, welche ich zum Austausch der Userdaten benötige
unit records; interface uses classes; type ttksuser = record username : string[30]; passhash : string[100]; end; type tuserreq = record ID: Integer; fullname : string[50]; firstname: string[50]; midlename: string[50]; checked : integer; cert : string; end; implementation end.
Delphi-Quellcode:
// Procedure für den Verbindungsaufbau
procedure TForm8.Button1Click(Sender: TObject); var IDMD5:TIdHashMessageDigest5; aactuser: ttksuser; arequser: tuserreq; abuf : tidBytes; asendstream : tmemorystream; begin try IDMD5:= TIdHashMessageDigest5.create; IdTCPClient1.Connect; aactuser.username:='Dirk Piethan'; aactuser.passhash:=LowerCase(IDMD5.HashStringAsHex('TestUser')); SetLength(aBuf, 0); abuf := RawToBytes(aactuser, SizeOf(aactuser)); IdTCPClient1.IOHandler.Write(abuf); SetLength(aBuf, 0); IdTCPClient1.IOHandler.ReadBytes(aBuf, Sizeof(arequser), false); BytesToRaw(aBuf, arequser, Sizeof(arequser)); if arequser.checked = -1 then showmessage('Keinen Benutzer angegeben'); if arequser.checked = -2 then showmessage('Keine Password angegeben'); if arequser.checked = -200 then showmessage('Loogin OK'); IDMD5.Free; SetLength(aBuf, 0); except showmessage('Verbindung fehlgeschlagen'); IDMD5.Free; SetLength(aBuf, 0); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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