该代码在运行时引发“访问冲突,地址为00000000。读取地址为00000000”错误。我正在尝试让服务器接受ssl请求,但确实遇到了麻烦。

我还将ssleay32.dll和libeay32.dll保存在调试文件夹中。任何帮助表示赞赏:

ServerIOHandler := TIdServerIOHandlerSSLOpenSSL.Create;

ServerIOHandler.SSLOptions.Method := sslvSSLv23;
ServerIOHandler.SSLOptions.Mode := sslmClient;
ServerIOHandler.SSLOptions.VerifyMode := [];
ServerIOHandler.SSLOptions.VerifyDepth := 0;

server:=TIdHTTPServer.Create;
server.IOHandler := ServerIOHandler;
server.DefaultPort:=port;
server.Bindings.DefaultPort:=port;

server.OnQuerySSLPort(8092, newBool);     //this is the line that throws the error

server.AutoStartSession:=true;
server.OnCommandGet:=idhttpserver1commandget;
server.SessionTimeOut:=360;
server.Active:=True;

最佳答案

出现此错误的原因是OnQuerySSLPort是一个事件,尚未为其分配处理程序。

OnQuerySSLPort的要点是您应该编写一个方法,然后将其分配给TIdHTTPServer对象的此属性。然后,每次触发事件时都会执行此方法(您编写的方法):

procedure TForm5.MyHandler(APort: TIdPort; var VUseSSL: Boolean);
begin
  // Do something
end;

procedure TForm5.FormCreate(Sender: TObject);
begin
  server := TIdHTTPServer.Create;
  server.OnQuerySSLPort := MyHandler;
  ...
end;


您可能更熟悉其他事件,例如TForm.OnCreateTTimer.OnExecute等。它们的工作方式相同:您编写一段代码,然后在适当的时候该对象执行该代码。

关于delphi - ssl httpserver抛出“访问冲突在地址00000000。读取地址00000000”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16336178/

10-13 05:20