请教:IdTCPClient通讯过程中,iohandler改变问题

morninggood 2009-04-14 07:34:40
请教:IdTCPClient通讯过程中,iohandler改变问题
IdTCPClient通讯的前一部分过程中,使用普通的iohandler,后一部分需要使用IdSSLIOHandlerSocketOpenSSL1,
前一部分通讯是正常的,当执行IdTCPClient1.Socket := IdSSLIOHandlerSocketOpenSSL1后,检测IdSSLIOHandlerSocketOpenSSL1.connected的属性是false,后面的命令就无法执行了。
请教一下,后面的iohandler,如何设置才能使用前面iohandler的socket?
...全文
241 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
morninggood 2009-04-14
  • 打赏
  • 举报
回复
unsigned大侠,太对了,我还没有来得及仔细看,马上研究!
StartTLS命令前,是非TLS传输,当Client执行了STARTTLS后,Server返回220,这个时候client要换TLS传输。
僵哥 2009-04-14
  • 打赏
  • 举报
回复
注意应用TIdSSLIOHandlerSocketBase里的PassThrough.

PassThrough为True,则是直接进行Socket 裸通讯,如果不再需要裸通讯,则设置PassThrough为false,并且开始SSL/TLS握手(Handshake)
僵哥 2009-04-14
  • 打赏
  • 举报
回复
注意:

type
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
);
僵哥 2009-04-14
  • 打赏
  • 举报
回复
不明白楼主的应用目的.
楼主是不想要这种效果?

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;

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧