请教:IdTCPClient通讯过程中,iohandler改变问题
IdTCPClient通讯的前一部分过程中,使用普通的iohandler,后一部分需要使用IdSSLIOHandlerSocketOpenSSL1,
前一部分通讯是正常的,当执行IdTCPClient1.Socket := IdSSLIOHandlerSocketOpenSSL1后,检测IdSSLIOHandlerSocketOpenSSL1.connected的属性是false,后面的命令就无法执行了。
请教一下,后面的iohandler,如何设置才能使用前面iohandler的socket?
IdTCPClient通讯的前一部分过程中,使用普通的iohandler,后一部分需要使用IdSSLIOHandlerSocketOpenSSL1,
前一部分通讯是正常的,当执行IdTCPClient1.Socket := IdSSLIOHandlerSocketOpenSSL1后,检测IdSSLIOHandlerSocketOpenSSL1.connected的属性是false,后面的命令就无法执行了。
请教一下,后面的iohandler,如何设置才能使用前面iohandler的socket?
解决方案 »
- 如何求指针指向数据的长度!
- 怎样调用报表控件(TRMReport )的“双击”事件?(Delphi)
- 如何用hook实现监视对任意文件的读操作
- char 与 string 的转换问题 (附代码)
- 求indy里的idsmtp控件发邮件的例程,大家邦一下,,
- 紧急求救:我的机器用的win98与2k的双系统,我把98所在引导分区(c盘)format重装后,如何才能在不用重装2k的情况下开机时双启动
- 推荐几本 PASCAL 语言的好书!
- Pardox表為何會報索引頭壞?
- 如何限制inputbox函数的输入位数?
- SOS,SOS.............
- CxGrid如何实现导出Excel 功能!
- ClientDataSet1.ApplyUpdates(0) 就报错不能在手动或分布事务方式下创建新的连接
楼主是不想要这种效果?procedure TIdSMTPBase.StartTLS;
var
LIO : TIdSSLIOHandlerSocketBase;
begin
try
if (IOHandler is TIdSSLIOHandlerSocketBase) and (FUseTLS <> utNoTLSSupport) then
begin
LIO := TIdSSLIOHandlerSocketBase(IOHandler);
//we check passthrough because we can either be using TLS currently with
//implicit TLS support or because STARTLS was issued previously.
if LIO.PassThrough then
begin
if SupportsTLS then
begin
if SendCmd('STARTTLS') = 220 then begin {do not localize}
TLSHandshake;
//send EHLO
SendGreeting;
end else begin
ProcessTLSNegCmdFailed;
end;
end else begin
ProcessTLSNotAvail;
end;
end;
end;
except
Disconnect;
Raise;
end;
end;
TIdUseTLS = (
utNoTLSSupport,
utUseImplicitTLS, // ssl iohandler req, allways tls
utUseRequireTLS, // ssl iohandler req, user command only accepted when in tls
utUseExplicitTLS // < user can choose to use tls
);
StartTLS命令前,是非TLS传输,当Client执行了STARTTLS后,Server返回220,这个时候client要换TLS传输。