求救idTCPSERVER的多线程通讯问题~~ ( 积分: 100 )

  • 主题发起人 主题发起人 lh9529
  • 开始时间 开始时间
L

lh9529

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾求救哈 ~
小弟最近使用DELPHI 7 的 IdTCPServer 来做数据库管理工具
具体功能是这样的:
客户端是使用VC编写的,通讯的包是自己定义的,根据报文的前4个字节来判断是什么信息,比如AA90,就是代表请求帐号,AA91就是将申请帐号加入数据库中,然后服务端根据这个来进行相应的处理,并保持通讯,将客户端需求信息发给相应客户端(有多个)。
我这里的取包是在IdTCPServerExecute方法里用:
AThread.Connection.ReadBuffer(head, sizeof(head));//head是自己定义的一个record
发送方法是用:
getmem(buf, 4096);
CopyMemory(buf, @head, sizeof(head));
CopyMemory(buf + sizeof(head), @stqueeninfo, sizeof(stqueeninfo));
try
if AThread.Connection.Connected = True then
begin
AThread.Connection.WriteBuffer(buf[0], head.m_wdSize, True);
end;
except
end;
freemem(buf);
但似乎不能进行超过 两个以上线程,报的错误是:
程序(通讯)出现错误,详细信息如下:EIdSocketErrorSocket Error # 10054
Connection reset by peer.
我在网上查的说好像要用什么locklist,来保存每个连接的帐号和密码什么的?但始终没有找到很好的DEMO,恳求各位前辈不吝赐教,救救小弟哈~~在线等~~
 
搜一下贴啊!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1671445
 
谢谢 Dstorm哈,给分了~
不过还有个问题哈,
那个FormClose方法里
我执行Clients.Free这句时,会报
Terminate Thread Timeout 是怎么回事呢?
 
后退
顶部