此代码在运行时抛出“地址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;
答案 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.OnCreate
,TTimer.OnExecute
等。这些工作方式相同:您编写一段代码然后执行的代码什么时候到了。