Delphi7 默认的的indy7里的TIdTCPServer总是有莫名其妙的错误——不经常出现,但出现了就杯具了。
跟踪的堆栈信息如下:EurekaLog 5.1.3Application:
------------------------------------------------------
1.1 Start Date: Fri, 8 Mar 2013 17:12:59 +0800
1.2 Name/Description: Test Server
1.3 Version Number: 1.0.204.30
1.4 Parameters: 
1.5 Compilation Date: Tue, 5 Mar 2013 15:48:24 +0800Exception:
--------------------------------------------------------------------------------------------------------------
2.1 Date : Sat, 9 Mar 2013 07:37:06 +0800
2.2 Address: 00404F60
2.3 Module : MyFirTestServer.exe
2.4 Type : EAccessViolation
2.5 Message: Access violation at address 00404F60 in module 'MyFirTestServer.exe'. Read of address 40E42FC2.Active Controls:
---------------------
3.1 Form Class : 
3.2 Form Text: 
3.3 Control Class: 
3.4 Control Text : Computer:
---------------------------------------------------------------------
4.1 Name: SERVER02
4.2 User: SYSTEM
4.3 Total Memory: 2048 Mb
4.4 Free Memory : 2048 Mb
4.5 Total Disk: 184.05 Gb
4.6 Free Disk : 59.47 Gb
4.7 System Up Time: 2 days, 15 hours, 47 minutes, 8 seconds
4.8 Processor : Intel(R) Xeon(R) CPU X3430@ 2.40GHz
4.9 Display Mode: 1024 x 768, 32 bitOperating System:
--------------------------------------
5.1 Type: Microsoft Windows 2003
5.2 Build # : 3790
5.3 Update: Service Pack 2
5.4 Language: ChineseNetwork:
---------------------------------------------------
6.1 IP Address: 192.168.000.003 - 000.000.000.000
6.2 Submask : 255.255.255.000 - 000.000.000.000
6.3 Gateway : 192.168.000.001 - 000.000.000.000
6.4 DNS 1 : 061.177.007.001 - 000.000.000.000
6.5 DNS 2 : 000.000.000.000 - 000.000.000.000
6.6 DHCP: OFF - ON Call Stack Information:
-----------------------------------------------------------------------------------------------------------------------------------------
|Address |Module |Unit|Class |Procedure/Method|Line |
-----------------------------------------------------------------------------------------------------------------------------------------
| Exception Thread: ID=4588; Priority=0; Class=TIdPeerThread|
|---------------------------------------------------------------------------------------------------------------------------------------|
|00404F60|MyFirTestServer.exe|system.pas||_LStrClr|11656|
|00404F54|MyFirTestServer.exe|system.pas||_LStrClr|11652|
|00405D2E|MyFirTestServer.exe|system.pas||_FinalizeArray|14404|
|00405CE4|MyFirTestServer.exe|system.pas||_FinalizeArray|14362|
|00405CB8|MyFirTestServer.exe|system.pas||_FinalizeRecord |14276|
|00405C98|MyFirTestServer.exe|system.pas||_FinalizeRecord |14257|
|0040407A|MyFirTestServer.exe|system.pas|TObject |CleanupInstance |8489 |
|00404068|MyFirTestServer.exe|system.pas|TObject |CleanupInstance |8479 |
|00403FBD|MyFirTestServer.exe|system.pas|TObject |FreeInstance|8365 |
|004043CE|MyFirTestServer.exe|system.pas||_ClassDestroy |9060 |
|004043CC|MyFirTestServer.exe|system.pas||_ClassDestroy |9060 |
|00509356|MyFirTestServer.exe|IdSocketHandle.pas|TIdSocketHandle |Destroy |130|
|0040400C|MyFirTestServer.exe|system.pas|TObject |Free|8385 |
|00404004|MyFirTestServer.exe|system.pas|TObject |Free|8384 |
|00413577|MyFirTestServer.exe|sysutils.pas||FreeAndNil|16274|
|0041355C|MyFirTestServer.exe|sysutils.pas||FreeAndNil|16271|
|0050C08B|MyFirTestServer.exe|IdIOHandlerSocket.pas |TIdIOHandlerSocket|Destroy |263|
|0040400C|MyFirTestServer.exe|system.pas|TObject |Free|8385 |
|00404004|MyFirTestServer.exe|system.pas|TObject |Free|8384 |
|00413577|MyFirTestServer.exe|sysutils.pas||FreeAndNil|16274|
|0041355C|MyFirTestServer.exe|sysutils.pas||FreeAndNil|16271|
|0050CD00|MyFirTestServer.exe|IdTCPConnection.pas |TIdTCPConnection|Disconnect|369|
|00518A66|MyFirTestServer.exe|idcustomhttpserver.pas|TIdCustomHTTPServer |DoExecute |610|
|004047D6|MyFirTestServer.exe|system.pas||_HandleFinally|10065|
|7C9585C0|ntdll.dll|||RtlRaiseException | |
|7C95859C|ntdll.dll|||RtlRaiseException | |
|7C95858E|ntdll.dll|||RtlRaiseException | |
|7C958568|ntdll.dll|||RtlRaiseException | |
|7C95E74A|ntdll.dll|||RtlDosPathNameToRelativeNtPathName_U| |
|00404752|MyFirTestServer.exe|system.pas||_HandleOnException|9951 |
|7C94A1F3|ntdll.dll|||RtlLeaveCriticalSection | |
|00402742|MyFirTestServer.exe|GETMEM.INC||SysGetMem |1038 |
|00404964|MyFirTestServer.exe|system.pas||_TryFinallyExit |10497|
|00404954|MyFirTestServer.exe|system.pas||_TryFinallyExit |10492|
|004026B8|MyFirTestServer.exe|GETMEM.INC||SysGetMem |1016 |
|00402C0A|MyFirTestServer.exe|system.pas||_GetMem |2439 |
|00402C00|MyFirTestServer.exe|system.pas||_GetMem |2429 |
|00405024|MyFirTestServer.exe|system.pas||_NewAnsiString|11866|
|00404F54|MyFirTestServer.exe|system.pas||_LStrClr|11652|
|00405067|MyFirTestServer.exe|system.pas||_LStrFromPCharLen |11912|
|00405044|MyFirTestServer.exe|system.pas||_LStrFromPCharLen |11885|
|0040E567|MyFirTestServer.exe|sysutils.pas||DateTimeToString|11715|
|7C94C3C5|ntdll.dll|||RtlMultiByteToUnicodeN| |
|0040781C|MyFirTestServer.exe|SysInit.pas ||_GetTls |359|
|004048A8|MyFirTestServer.exe|system.pas||_RaiseExcept|10262|
|0050CACC|MyFirTestServer.exe|IdTCPConnection.pas |TIdTCPConnection|CheckForDisconnect|307|
|00404752|MyFirTestServer.exe|system.pas||_HandleOnException|9951 |
|004048A8|MyFirTestServer.exe|system.pas||_RaiseExcept|10262|
|0050CACC|MyFirTestServer.exe|IdTCPConnection.pas |TIdTCPConnection|CheckForDisconnect|307|
|7C9585C0|ntdll.dll|||RtlRaiseException | |
|7C95859C|ntdll.dll|||RtlRaiseException | |
|7C95858E|ntdll.dll|||RtlRaiseException | |
|7C958560|ntdll.dll|||RtlRaiseException | |
|7C94A1F3|ntdll.dll|||RtlLeaveCriticalSection | |
|00402742|MyFirTestServer.exe|GETMEM.INC||SysGetMem |1038 |
|7C9584A7|ntdll.dll|||RtlRaiseException | |
|00402919|MyFirTestServer.exe|GETMEM.INC||SysFreeMem|1139 |
|00402C35|MyFirTestServer.exe|system.pas||_FreeMem|2466 |
|00402C30|MyFirTestServer.exe|system.pas||_FreeMem|2456 |
|00404F99|MyFirTestServer.exe|system.pas||_LStrArrayClr |11703|
|00404F78|MyFirTestServer.exe|system.pas||_LStrArrayClr |11687|
|7C80BEF1|kernel32.dll |||RaiseException| |
|00402742|MyFirTestServer.exe|GETMEM.INC||SysGetMem |1038 |
|7C831F81|kernel32.dll |||FindFirstFileA| |
|0040AE4C|MyFirTestServer.exe|sysutils.pas||FileAge |4944 |
|00402C35|MyFirTestServer.exe|system.pas||_FreeMem|2466 |
|00402C30|MyFirTestServer.exe|system.pas||_FreeMem|2456 |
|00404F70|MyFirTestServer.exe|system.pas||_LStrClr|11663|
|00404F54|MyFirTestServer.exe|system.pas||_LStrClr|11652|
|00405623|MyFirTestServer.exe|system.pas||_LStrSetLength|13051|
|004055CC|MyFirTestServer.exe|system.pas||_LStrSetLength|13002|
|00403023|MyFirTestServer.exe|system.pas||GetParamStr |3423 |
|00402F70|MyFirTestServer.exe|system.pas||GetParamStr |3392 |
|00403180|MyFirTestServer.exe|system.pas||ParamStr|3501 |
|00402C35|MyFirTestServer.exe|system.pas||_FreeMem|2466 |
|00402C30|MyFirTestServer.exe|system.pas||_FreeMem|2456 |
|00404F70|MyFirTestServer.exe|system.pas||_LStrClr|11663|
|00404F54|MyFirTestServer.exe|system.pas||_LStrClr|11652|
|00402C35|MyFirTestServer.exe|system.pas||_FreeMem|2466 |
|00402C30|MyFirTestServer.exe|system.pas||_FreeMem|2456 |
|00404F70|MyFirTestServer.exe|system.pas||_LStrClr|11663|
|00404F54|MyFirTestServer.exe|system.pas||_LStrClr|11652|
|7C957587|ntdll.dll|||NtQueryVirtualMemory| |
|7C826EAF|kernel32.dll |||VirtualQueryEx| |
|7C826E98|kernel32.dll |||VirtualQueryEx| |
|7C826ED9|kernel32.dll |||VirtualQuery| |
|7C94A1F3|ntdll.dll|||RtlLeaveCriticalSection | |
|00402919|MyFirTestServer.exe|GETMEM.INC||SysFreeMem|1139 |
|0040AE30|MyFirTestServer.exe|sysutils.pas||FileAge |4943 |
|0040AEAC|MyFirTestServer.exe|sysutils.pas||FileExists|4972 |
|004043CE|MyFirTestServer.exe|system.pas||_ClassDestroy |9060 |
|0040AEA0|MyFirTestServer.exe|sysutils.pas||FileExists|4971 |
|00404F78|MyFirTestServer.exe|system.pas||_LStrArrayClr |11687|
|7C80BEF1|kernel32.dll |||RaiseException| |
|004048A8|MyFirTestServer.exe|system.pas||_RaiseExcept|10262|
|0050CACC|MyFirTestServer.exe|IdTCPConnection.pas |TIdTCPConnection|CheckForDisconnect|307|
|0050DA79|MyFirTestServer.exe|IdTCPConnection.pas |TIdTCPConnection|WriteBuffer |740|
|00402C0A|MyFirTestServer.exe|system.pas||_GetMem |2439 |
|00402C00|MyFirTestServer.exe|system.pas||_GetMem |2429 |
|00405024|MyFirTestServer.exe|system.pas||_NewAnsiString|11866|
|0050DA38|MyFirTestServer.exe|IdTCPConnection.pas |TIdTCPConnection|WriteBuffer |737|
|0050DA2C|MyFirTestServer.exe|IdTCPConnection.pas |TIdTCPConnection|Write |728|
|0050DE3F|MyFirTestServer.exe|IdTCPConnection.pas |TIdTCPConnection|WriteLn |832|
|00519F4D|MyFirTestServer.exe|idcustomhttpserver.pas|TIdHTTPResponseInfo |WriteHeader |1064 |
|00519E40|MyFirTestServer.exe|idcustomhttpserver.pas|TIdHTTPResponseInfo |WriteHeader |1037 |
|00518977|MyFirTestServer.exe|idcustomhttpserver.pas|TIdCustomHTTPServer |DoExecute |586|
|00511B54|MyFirTestServer.exe|IdTCPServer.pas |TIdPeerThread |Run |796|
|0046F030|MyFirTestServer.exe|SyncObjs.pas|TCriticalSection|Leave |221|
|0050F0B6|MyFirTestServer.exe|IdThread.pas|TIdThread |GetStopped|216|
|00511A4A|MyFirTestServer.exe|IdTCPServer.pas |TIdPeerThread |BeforeRun |759|
|0050EDD4|MyFirTestServer.exe|IdThread.pas|TIdThread |Execute |137|
|0042EAB2|MyFirTestServer.exe|classes.pas ||ThreadProc|9372 |
|00402C35|MyFirTestServer.exe|system.pas||_FreeMem|2466 |
|00404EF8|MyFirTestServer.exe|system.pas||ThreadWrapper |11554|

解决方案 »

  1.   

    最近也在弄这块 纯socket的 不想用这个
      

  2.   


    纯socket重新封装太耗费精力了,选了个偷懒的方案
      

  3.   


    弄个Dll以后用多方便
      

  4.   

    如果在调试环境下,你可以看stack情况分析。
      

  5.   

    这和DLL没有关系,如果的把网络连接与发送放DLL里,反而更加不好调试了
      

  6.   


    用indy还用处优越感来了
      

  7.   


    大哥,我最近也在做dll封装IndyTCP,但遇到了问题:TCPServer不响应事件,目测是线程问题,有例子么?给小弟发一个。