1

此代码在运行时引发“地址 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;
4

1 回答 1

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.OnCreate,TTimer.OnExecute等。它们的工作方式相同:编写一段代码,然后对象在适当的时候执行该代码。

于 2013-05-02T10:56:00.827 回答