(同一个世界,同一个梦想,交流学习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了。
{
ClientSocket1->Host="192.168.1.99";
ClientSocket1->Port=8899;
ClientSocket1->ClientType=ctBlocking; //必须修改为阻塞属性
try
{
ClientSocket1->Open();
}
catch(...)
{
ShowMessage("连接失败");
}
if(ClientSocket1->Active) //此处就可以获得准确结果
{
ShowMessage("连接成功");
}
else
{
ShowMessage("连接失败");
}
}
//---------------------------------------------------------------------------