ssl httpserver抛出'地址00000000的访问冲突。读取地址00000000'错误

时间:2013-05-02 10:51:35

标签: delphi https indy delphi-xe3

此代码在运行时抛出“地址00000000处的访问冲突。读取地址00000000”错误。我试图让服务器接受ssl请求,但我遇到了麻烦。

我也有ssleay32.dll& libeay32.dll保存在debug文件夹中。任何帮助表示赞赏:

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;

1 个答案:

答案 0 :(得分:3)

您收到此错误的原因是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等。这些工作方式相同:编写一段代码然后执行的代码什么时候到了。