在delphibbs 上没有解决的难题

gaolang1 2004-04-14 10:10:32
我用 TIDTcpServer (Delphi 7 自带的)
(1) 程序有时会占用 100% 的CPU时间,然后就是连接断开!
我查了好久也没有发现问题的根源,我想可能是 TIDTcpServer 的多线程机制造成的,
怎么办呢?
(2) 如何管理客户端呢?我发现同一个客户端重连一次,server就自动新建了一个Socket,我想应该是释放以前的在建,但一free就报错;或者利用线程的 resume ,也不行。
(3) Server不能检测到客户端的断开消息,(客户端断开时,它能跳到procedure Tfrmmain.TCPServerExecute(AThread: TIdPeerThread)中,但确没有收到半个字节)。

...全文
17 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaolang1 2004-04-27
  • 打赏
  • 举报
回复
我查出了问题,当有客户端连接断开时就会出现这种情况。
程序不停的在执行:
procedure Tfrmmain.TCPServerExecute(AThread: TIdPeerThread);
var
msg : string;
recdata : Tdata;
reclen ,i ,k: integer;
onerecbody,returncommand:tdata;
onerecbodylen,returncommandLen:integer;
begin

TRY
with Athread.Connection do
begin
// msg:=AThread.Connection.ReadLn();
// exit;
// AThread.Connection.ReadBuffer(order[tail].OrderBuffer,sizeof(Tdata));
recLen:=Athread.Connection.Socket.Recv(order[tail].OrderBuffer,sizeof(Tdata));
// exit;

// reclen := athread.Connection.
// btnListen.Caption := (AThread.Connection.CurrentReadBuffer);
// exit;
if recLen>0 then
。。。。。。。。


但是我如果使用
msg:=AThread.Connection.ReadLn();
就没有这个问题,
怎么回事呢? 我要的是一个数值buffer啊
YichengWang 2004-04-16
  • 打赏
  • 举报
回复
你说的问题都不是什么问题,
要好好看看Indy的例子和帮助,如果有耐心可以看看Indy的源码,
你出的问题,都是你程序设计的问题,不是Indy的问题。
ly_liuyang 2004-04-15
  • 打赏
  • 举报
回复
不会呀

不要用自带的,那个版本旧有不少问题的
请下载Indy9。0。14版在官方站点,还有Help和Demo的
viaboy 2004-04-15
  • 打赏
  • 举报
回复
help u up

========================

mark
jacket008 2004-04-15
  • 打赏
  • 举报
回复
up
zhuangjunx 2004-04-15
  • 打赏
  • 举报
回复
关注

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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