C++ BUILDER如何解决IdTCPClient不能马上获得连接状态的问题?

(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。)

Indy控件IdTCPClient在发出连接指令后马上判断连接状态结果不准确,因为他属于线程模式,需要在OnConnect事件中才能准确获得结果,为此换用ClientSocket控件解决该问题。

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
IdTCPClient1->Host="192.168.1.99";
IdTCPClient1->Port=8899;
try
    {
    IdTCPClient1->Connect();
    }
catch(...)
    {
    ShowMessage("连接失败");
    }
if(IdTCPClient1->Connected()) //此处无法获得准确结果
    {
    ShowMessage("连接成功");
    }
else
    {
    ShowMessage("连接失败");
    }

}

//---------------------------------------------------------------------------

C++Buider10.2.2tokyo默认没有安装ClientSocket控件,但是已经集成了安装包,安装一下即可。操作如下:

主菜单Component-》install packages,Add 打开目录C:\Program Files (x86)\Embarcadero\Studio\19.0\bin,选择dclsockets250.bpl,安装之后在右下角的Internet组件下就会出现ClientSocket和ServerSocket了。

void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClientSocket1->Host="192.168.1.99";
ClientSocket1->Port=8899;
ClientSocket1->ClientType=ctBlocking; //必须修改为阻塞属性
try
    {
    ClientSocket1->Open();
    }
catch(...)
    {
    ShowMessage("连接失败");
    }
if(ClientSocket1->Active) //此处就可以获得准确结果
    {
    ShowMessage("连接成功");
    }
else
    {
    ShowMessage("连接失败");
    }
}
//---------------------------------------------------------------------------
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值