用INDY做的C/S程序,在客户端与服务器建立连接的时候,服务端报错(50分)

  • 主题发起人 主题发起人 yixi_370785
  • 开始时间 开始时间
Y

yixi_370785

Unregistered / Unconfirmed
GUEST, unregistred user!
具体的错误我没法贴图,不过大体的是报ntdll.dll内存错,我一开始以为是我的代码有问题,不过我换成INDY中的DEMO中的也是有问题,请指教!
下面是SERVER中的部分代码,我觉得可能是这里有问题:
procedure TForm_Server.idtcpsrvrConnect(AThread: TIdPeerThread);
var
NewClient : PClient;
begin
getMem(NewClient,SizeOf(TClient));

NewClient.DNS := AThread.Connection.LocalName;
NewClient.Connected := Now;
NewClient.lastAction := NewClient.Connected;
NewClient.Thread := AThread;

AThread.Data := TObject(NewClient);
try
Client.LockList.Add(NewClient);
finally
Client.UnlockList;
end;
printInfo(mmo_Show,NewClient.DNS + '已经登陆');
lst_Main.Items.Add(NewClient.DNS);
end;

这完全是参考INDY中的DEMO的写法写的!

请各位DFW指教!
 
报错后,可按Ctrl + C ,将异常的文本拷贝出来,不必贴图.
既然是按INDY 的DEMO 做,也就不存在问题了.你肯定还有其它地方的问题,你要全部列出来,才能帮你
 
就能看到的代码而言,提两点:
1.用有GetMem(...) ,最后没有 FreeMem(...)
2.
printInfo(mmo_Show,NewClient.DNS + '已经登陆');
lst_Main.Items.Add(NewClient.DNS);
中,最好用线程同步.因为INDY是多线程的,而VCL处理是单线程的.
 
遗憾的是我今天再调试的时候就没有这个错误了,难道是系统的问题,我看那个DLL就是系统的DLL,我用的是WINDOWS2003
to jettop:
1.你说的很对,我忘了freeMem了
2.能不能说的明白点,是不是用synchronized()呀,刚开始做delphi好多东西都是看DEMO的

请多指教!
 
呵呵,还是有问题,刚才是因为我把那段代码注释掉了,
我把错误贴出来了
---------------------------
Debugger Exception Notification
---------------------------
Project P_Server.exe raised exception class EAccessViolation with message 'Access violation at address 7C94A379 in module 'ntdll.dll'. Write of address 0000000C'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
 
。。。。。。
没人回答了,我自己用另外的方法实现了,这个还是没有解决
没人会么?
可能是没有说清楚吧!结贴了!
 
后退
顶部