2013-05-02 228 views
1

此代码在运行时抛出'访问冲突地址为00000000.地址00000000'错误。我试图让服务器接受ssl请求,但真的有麻烦。ssl httpserver抛出'访问冲突地址为00000000.读取地址00000000'错误

我也有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; 

回答

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等,这些工作方式相同: you编写一段代码,然后在正确的时间到时执行该对象。

+0

谢谢。服务器使用ssl进行连接是否需要该事件? – user1365875 2013-05-02 12:54:36

+1

@ user1365875:我对Indy的经验很少。 Indy文档应该足以回答您的问题,但您也可以希望其他人在这里看到您的Q(或者您可以针对该问题专门提出一个新Q)。 – 2013-05-02 13:33:41

+0

@AndreasRejbrand:Indy文档不是最新的。 – 2013-05-02 17:46:24

相关问题