关于INDY10 的TIdTCPServer,启动都异常。

zhgwbzhd 2014-08-13 09:05:10
原来使用bcb6+INDY9,代码如下:
IdTCPServer1->DefaultPort = StrToInt(Edit1->Text);
IdTCPServer1->Active = true;
就可以开始侦听。
现在使用xe6+INDY10

IdTCPServer1->DefaultPort = ::StrToInt(Edit_port->Text);
IdTCPServer1->Active = true;

怎么就会异常呢?
...全文
152 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2014-08-13
  • 打赏
  • 举报
回复
敢不敢告诉我你那个Edit_port里到底填的啥数据?另外,你这个IdTCPServer1组件有没有绑定OnExecute事件?
zhgwbzhd 2014-08-13
  • 打赏
  • 举报
回复
妖哥,您说的那个,我是这么弄得,还是异常。

int MY_port;
try
{

MY_port = ::StrToInt(Edit_port->Text);//端口
Edit_port->Text = ::IntToStr(MY_port);

IdTCPServer1->Bindings->Clear();
TIdSocketHandle *sh;
sh = IdTCPServer1->Bindings->Add();
sh->IP = "127.0.0.1";
sh->Port = MY_port;
sh->IPVersion = Id_IPv4;
IdTCPServer1->DefaultPort = MY_port;
IdTCPServer1->Active = true;

if(IdTCPServer1->Active)
{
Memo1->Lines->Add("开始侦听");
Button_start->Enabled = false;
Button_end->Enabled = true;
}
else
{
Memo1->Lines->Add("侦听失败");
Button_start->Enabled = true;
Button_end->Enabled = false;
}
}
catch(...)
{
Memo1->Lines->Add("侦听异常");
Button_start->Enabled = true;
Button_end->Enabled = false;
}
ccrun.com 2014-08-13
  • 打赏
  • 举报
回复
请留意我在四楼的回复
zhgwbzhd 2014-08-13
  • 打赏
  • 举报
回复
异常就在。 IdTCPServer1->Active = true; 如果换成 IdTCPServer1->StartListening(); 下面判断 IdTCPServer1->Active就是false
ccrun.com 2014-08-13
  • 打赏
  • 举报
回复
另外,IdTCPServer1的Bindings可曾设置?
IdTCPServer1->Bindings->Clear();
TIdSocketHandle *sh = IdTCPServer1->Bindings->Add();
sh->IP = "IP地址";
sh->Port = 端口号;
ccrun.com 2014-08-13
  • 打赏
  • 举报
回复
我没有看到你的代码中有对Edit_port->Text的值合法性判断的语句。 实在不行就单步跑吧,看跑到哪一步出错。
zhgwbzhd 2014-08-13
  • 打赏
  • 举报
回复
多谢妖哥回复,肯定是数字。 我前面也有判断。完整代码如下: int MY_port; try { MY_port = ::StrToInt(Edit_port->Text); Edit_port->Text = ::IntToStr(MY_port); IdTCPServer1->DefaultPort = MY_port; IdTCPServer1->Active = true; if(IdTCPServer1->Active) { Memo1->Lines->Add("开始侦听"); Button_start->Enabled = false; Button_end->Enabled = true; } else { Memo1->Lines->Add("侦听失败"); Button_start->Enabled = true; Button_end->Enabled = false; } } catch(...) { Memo1->Lines->Add("侦听异常"); Button_start->Enabled = true; Button_end->Enabled = false; } 现在是提示“侦听异常”。
ccrun.com 2014-08-13
  • 打赏
  • 举报
回复
你这个Edit里填的内容不是数字?用StrToIntDef试试。
int nPort = StrToIntDef(Edit_port->Text, 0);
if (nPort < 1)
{
    ShowMessage("泄特端口");
}
else
{
    IdTCPServer1->DefaultPort = nPort;
    ...
}
zhgwbzhd 2014-08-13
  • 打赏
  • 举报
回复
哇呀啊啊呀啊呀,吐了一口血。 多谢妖哥。现在终于启动了。
ccrun.com 2014-08-13
  • 打赏
  • 举报
回复
引用 9 楼 zhgwbzhd 的回复:
绑定OnExecute事件?我现在连启动还没有,别的就没弄呢。 目前只是一个启动。
IdTCPServer组件必须绑定一个OnExecute事件才能正常启动。这个秘密难道我会告诉你?
zhgwbzhd 2014-08-13
  • 打赏
  • 举报
回复
妖哥 那个里面确实就是一个数值。 我现在直接改成这样。 //MY_port = ::StrToInt(Edit_port->Text);//端口 MY_port = 7000; 绑定OnExecute事件?我现在连启动还没有,别的就没弄呢。 目前只是一个启动。

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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