Einzelnen Beitrag anzeigen

Piethan

Registriert seit: 2. Jun 2008
Ort: Köln
43 Beiträge
 
Delphi XE Architect
 
#1

idTCPClient EAccessViolation beim Verlassen der Prozedur

  Alt 11. Aug 2010, 09:13
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:
EIdOSSLConnectError mit Meldung 'Error connecting with SSL.
EOF was observed that violates the protocol'
Bei der zweiten Verbindung erhalte ich beim Verlassen der Prozedur noch eine EAccessViolation, welche ich mit
dem Debugger nicht ausmachen kann, weil die Prozedur ja schon beendet ist. Jedoch steht an in der CPU
Ansicht:
Code:
757DB727 C9               leave
Kann einer von Euch erkennen wo mein Fehler liegt, oder wo ich suchen sollte?

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;
  Mit Zitat antworten Zitat