如何屏蔽socket出错对话框!(100)

  • 主题发起人 主题发起人 zkktom
  • 开始时间 开始时间
Z

zkktom

Unregistered / Unconfirmed
GUEST, unregistred user!
我在开发公司内部qq的时候出现了个问题。服务器上老出现socket出错的问题。(出现原因就是发出去的时候对方已经下线了)TServerSocket 其中 ClientError 事件我已经写上begin ; end; ClientDisconnect事件我也写上begin ; end;其中原因我我也清楚,链接好后,其中一台电脑强制管机或关闭进程。服务器没有接收到断线信号。
 
TServerSocket 没用过,不过应该自己写 try except end 来屏蔽socket发送出错的情况吧.tcp 链接存在这个问题啊.所以很多要写握手或者心跳协议.
 
同意楼上,我以前也是采用的这种方式,try..except..end;并建议在异常部分,将异常原因写入日志文件。
 
楼上的 此处我早就写了! 就是还跳出错误 ,有高手能帮我处理下吗?procedure Tfmmain.sendxx(nr: string);vari:integer;begin try for i:=0 to sg.Socket.ActiveConnections-1 do begin if sg.Socket.Connections.Connected then sg.Socket.Connections.SendText(nr) else sg.Socket.Connections.Close; end; except ; end;
 
procedure TFrmMain.SSocketClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);beginErrorCode := 0;end;
 
我的软件是这样设计的 我放了个server在服务器上,然后对方广播消息,其中sendxx(nr: string);就是发送消息的代码。不过服务程序运行的时候都没有错误,就是偶尔会出现Asynchronous socket error 10053,但不影响工作。 我的做法是想把那消息屏蔽掉。是不是说只要在在SSocketClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);beginErrorCode := 0;end; 处理下就不会出现问题呢? 不过我得等下班前去处理这问题!
 
用 草原骏马 的代码就可以了。建议你加上心跳处理,及时清除掉了线的连接
 
我也想知道
 
心跳处理 啥玩意 没接触过 指导下可以吗
 
心跳包嘛.UDP上用来判断对方存活的方法.eg:10S发送一个固定包回去.对方回应了.就在.
 
scxujie 说了 心跳处理就是清除掉了线的连接。
 
ErrorCode := 0;
 
多人接受答案了。
 
后退
顶部