当TClientSocket与TServerSocket连接成功,这时从server不断的发数据给client,主动把client关闭,这时会出现这样一个错误提示"First chance exception at $77E53887 . Exception class ESocketError with message 'Windows socket error: 在一个非套接字上尝试了一个操作。 (10038), on API 'closesocket''. Process SmartLogger.exe ($680)",有时候会把server端程序搞死了,会自动关闭,我已经处理了错误事件,好象有些错误事件在程序中捕获不到?
procedure TCustomerData.ClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
var
  strError: String;
begin
  ErrorCode := 0;
end;请高手指教,谢谢,在线等

解决方案 »

  1.   

    >>从server不断的发数据给client关于这样的网络通讯业务逻辑,我一般是这样建议,使用同步方式来处理,方式A:
    1.client连接成功server,
    2.client向server发送在线消息
    3.server发送数据给client;
    4.回至第2步这种方式,以client为主动,server不必去主动连接client,可减轻server的压力;方式B:
    1.client连接成功server,发送在线消息
    2.server检查client是否在线,若在线发送数据给client;若不在线转入第6步
    3.client 成功收到,返回一个收到数据的消息让server确认
    4.server接收确定消息,收不到转6
    5.回到2
    6.client已关闭,不再发送,退出;这种方式,以server为主,主要去检测client的状态,楼主所说的异常没有处理到,,我认为楼主可以将发送数据的代码放入一个try语句中
      

  2.   

    try语句已经有了,但还是死了,我是把该程序放在Dll中的,是在服务端发送数据的瞬间,客户断开,就出现了上前的错误
      

  3.   

    楼主用sniffer之类的软件,捕一下服务器端与客户端的数据包,看看能不能看是什么问题,,检查一下是哪一方发送了一个reset包,是哪一方主动断开连接的
      

  4.   

    我把TSeverSocket和TClientSocekt放在DLL中,当客户端异常断开的时候,调用了CheckSocketResult(closesocket(FSocket), 'closesocket');
    (在delphi源代码中procedure TCustomWinSocket.Disconnect(Socket: TSocket);的一条语句); 
    这时服务器数据发送也出现了异常也调用了
    CheckSocketResult(closesocket(FSocket), 'closesocket');语句后就出现程序自动关闭
      

  5.   

    嘿嘿,,楼主的情况比较奇怪哩~~~~你用delphi的哪个版本呀,打打补丁,尽尽人事吧
      

  6.   

    delphi 5,打过三个补丁,不知socket是否有补丁
      

  7.   

    这样呀,我用的是D7~~~楼主找一个D7来试,盒子里有D7的精简版,才40M,我就是用它来调试的~~~Delphi7 Second Edition v7.2
    http://www.2ccc.com/article.asp?articleid=3661
    或者这个http://www.delphifans.com/SoftView/SoftView_2256.html
    或者干脆去找一个完整的企业版,也才100多M,