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 に答える