200分求 IdTCPServer 卡死问题,请各位朋友帮忙啊 先谢谢了

surebaby5 2007-03-07 01:36:16
这个是服务器端IdTCPClient1端的。
都是默认
IdTCPClient1->Host=Edit1->Text;
IdTCPClient1->Port=Edit2->Text.ToInt();
try
{
IdTCPClient1->Connect(10000);
}
catch(EIdException* e)
{

异常处理。。。。
}
try
{
// EnterCriticalSection(&g_cs);//控制入口已去掉
IdTCPClient1->WriteInteger(2);// 用于驱动服务器连接
IdTCPClient1->WriteLn(Memo5->Lines->Strings[0]);// 这个是读memo的第一行
Memo4->Text=IdTCPClient1->ReadLn();//接受服务器返回的值
// IdTCPClient1->Disconnect(); //开启以后就设置为每次回传以后都重新连接。
// LeaveCriticalSection(&g_cs);

}
catch(EIdException* e)
{
IdTCPClient1->Disconnect();// 如果发生异常 就段开服务器
}


IdTCPServer1 部分
服务器部分的TerminateWaitTime 设置为0 。 要不会发送的时候会提示 Terminate out Time

if(AThread->Connection->ReadInteger()==2)//判断线程

{

String a
a=AThread->Connection->ReadLn();

a 为 sql 语句。
处理与数据库的交互信息



AThread->Terminate();//关闭线程
}

catch(EIdException *e)
{
AThread->Terminate();//异常不执行完毕关闭线程
AThread->Stop();//挂起
AThread->Free();//释放


}

}

一般清楚下 都使用完好。 但是如果服务器查询过快 就会死掉 一直抱 Terminate out Time
跪求大哥大姐门 帮帮忙啊。 谢谢拉。


...全文
916 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
nuptwzp 2007-06-18
  • 打赏
  • 举报
回复
我也要的啊。。。
meikeer 2007-05-01
  • 打赏
  • 举报
回复
up
meikeer 2007-04-24
  • 打赏
  • 举报
回复
帮顶,我也遇到这样的问题了
Waiting4you 2007-04-14
  • 打赏
  • 举报
回复
不好意思这么久才回, 我是没看到你有WriteLn所以提醒一下, 不一定要在接收到的时候回的.

服务器接受一个客户端的时候就会建立一个线程的. 关于INDY9的DEMO是因为半年前我在公司无聊时花了两星期时间把Delphi代码转成了C++Builder代码(大约2/3吧,后来没心思了),呵呵,如果要的话我发给你
surebaby5 2007-04-07
  • 打赏
  • 举报
回复


您在上面说 //另外再WriteLn一些回Client,不然那边等晕了
我是操作数据库以后才回的 代码如下

AThread->Connection->WriteLn("<?xml version=\"1.0\" standalone=\"yes\"?>""<NewDataSet>"+XML+"</NewDataSet>");

等个查询数据库应该没事情把

难道非要在一接受的时候就回吗 ?
surebaby5 2007-04-07
  • 打赏
  • 举报
回复
回 毛毛 我现在基本都可以用了 太谢谢你了

如果我不用data 的话 也不会出现问题把

现在我的疑惑有2个
一,AThread->Connection->ReadInteger()==2
这样的时候应该就动态分配了一个线程序给来的程序执行了吧

二,您有DEMO吗 给我份学习 行吗 ?

最后还是和你说声 谢谢啊。
daily66 2007-03-24
  • 打赏
  • 举报
回复
猪猪顺的贴这么红啊?
妖哥都帮顶了
接分是硬道理呀。。。呵呵
Waiting4you 2007-03-24
  • 打赏
  • 举报
回复
对了,另外判断线程可以使用AThread里的Data属性,它类似于VCL控件的Tag属性,给我们自己定义的.
Waiting4you 2007-03-24
  • 打赏
  • 举报
回复
AThread->Terminate();的目的是什么? 我在Indy9的Demo里其本上没看到正常情况下调用这个的,下面这样试试吧? (我对Indy也不是很熟,不要笑话哦)


IdTCPClient1->Host=Edit1->Text;
IdTCPClient1->Port=Edit2->Text.ToInt();
try
{
if(!IdTCPClient1->Connected()) IdTCPClient1->Connect(10000);
}
catch(EIdException* e)
{
//异常处理。。。。
}
try
{
IdTCPClient1->WriteInteger(2);// 用于驱动服务器连接
IdTCPClient1->WriteLn(Memo5->Lines->Strings[0]);// 这个是读memo的第一行
Memo4->Text=IdTCPClient1->ReadLn("", 1000);//接受服务器返回的值,改成这样安心点,呵呵
}
catch(EIdException* e)
{
IdTCPClient1->Disconnect();// 如果发生异常 就段开服务器
}


IdTCPServer1 部分
服务器部分的TerminateWaitTime 设置为0 。 要不会发送的时候会提示 Terminate out Time
//TCPServerExecute(TIdPeerThread *AThread)

if(AThread->Connection->ReadInteger()==2)//判断线程
{
try{
String a=AThread->Connection->ReadLn();
//a 为 sql 语句。
//处理与数据库的交互信息
//另外再WriteLn一些回Client,不然那边等晕了
}
catch(EIdException *e)
{
AThread->Terminate();//异常不执行完毕关闭线程
AThread->Stop();//挂起
AThread->Free();//释放
}
}
daily66 2007-03-24
  • 打赏
  • 举报
回复
不懂三层
dreamnyj 2007-03-09
  • 打赏
  • 举报
回复
是否安装了独立的防火墙,还有XP自带的防火墙

我碰到过类似问题,有时候就是卡死,,原因是XP自带的防火墙和瑞星防火墙
一起拦截API结果只有一个弹出框来。。。另一个没有出框,结果卡死

surebaby5 2007-03-09
  • 打赏
  • 举报
回复
谢谢楼上的 , 晚上 调试下 。 如果成功 分2次 一次100分 。 看到帖子的 还希望 帮忙指点,
constantine 2007-03-08
  • 打赏
  • 举报
回复
server端的代码看不清楚,有点乱,在哪里执行的也不知道
你可以先不做数据库处理,看看会不会,如果还会,就确定是你indy部分代码的问题
如果不会,应该就是数据库处理上有问题,如果太慢,自己开个线程处理,不要在接受到就马上处理
surebaby5 2007-03-08
  • 打赏
  • 举报
回复
回 constantine(飘遥的安吉儿) ,hi 您好 ,

谢谢你了, 我按照你的说法 还是有点问题 ,

还有谁能提供点办法呢 ? 如果速度快的话 还是会提示Terminate out Time
ly_liuyang 2007-03-07
  • 打赏
  • 举报
回复
自己Debug处理
记住一点:Indy自身也不是非常可靠,也有Bug的!
surebaby5 2007-03-07
  • 打赏
  • 举报
回复
在对数据库草操作时注意锁的问题。 已经被我设置为 默认的拉 。。
surebaby5 2007-03-07
  • 打赏
  • 举报
回复
谢谢老蔡啊 。 hoho 都知道 我是猪猪拉 , 猪猪 在这里谢谢你门了。
surebaby5 2007-03-07
  • 打赏
  • 举报
回复
请问下 怎么开始线程。 不是进到服务器线程 就自动分配了吗 ?
samchoy 2007-03-07
  • 打赏
  • 举报
回复
俺不懂网络,帮肉包子兄弟顶一顶
iwenlove 2007-03-07
  • 打赏
  • 举报
回复

在起线程时判断,

在对数据库草操作时注意锁的问题。

加载更多回复(5)

1,317

社区成员

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

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