idtcpserver 断开后client端总是报错? 客户端定时发送数据给服务器端如果server端异常断开后idclient端总是报错?那位高手指点,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我就是不想让她报错!,想让客户端检测到服务器已经断开了!请问怎样解决?好像问题出在定时发送接受上,就连indy/Domes/chat都有这样的问题,server端不能先掉线,我总不能保证网络总是通畅!我试着在onDisconnected里写代码让定时器停掉可是还是有问题,还是过用try/except做异常处理也不行! 高手们指点一下吧,谢了我差了很多例程,都没有考虑服务器端先掉线怎么办!都是报错我要做一个监控通信软件,客户端每0.5秒给服务器发送信息(最多有15个客户端),服务器端接收并显示然后再做判断发给另外的客户端请问用idtcpserver/idtcpclient可以满足要求吗?我是第一次用indy开发通讯软件帮帮我吧!!!! 可以你可以通过idtcpclient控件判断是否连接的,连接的才发送啊 那要是网断了怎么办?主要就是这个问题,现在就是网线断开后idtcpclient端报错 在客户端把错误处理一下就行了吧,好像是OnError事件 把你的idtcpclient读语句改成这样: try str:=idTCPClient1.ReadLn(); ........ except Exit; end;改了之后调试时(即用Delphi上的运行时)还会有错,直接执行编译的exe就不再提示出错了. 我很好的解决了这个问题,我用的ServerSocket/ClientSocket,当ServerSocket服务端断开后,ClientSocket端提示服务器断开,并自动监测尝试重新连接。给你段我的代码你参考吧://当断开与服务器端的连接时发生procedure TfrmSmallScreen.ClientSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket);begin tbSend.Enabled := False; tbDisconnected.Enabled := False; StatusBar.Panels[0].Text := '已经断开与与服务器的连接!等待连接到服务器...'; if ISCLOSE then //服务端主动关闭连接 close; if (not ISCLOSE) and ISSocketConnect then //连接成功后的异常断开 begin Timer1.Enabled:=True; ISSocketConnect:=False; end;end;//当与服务器端的连接发生错误时procedure TfrmSmallScreen.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);begin //StatusBar.Panels[0].Text := '与服务器端的连接发生错误'; ErrorCode := 0; myConnected;end;procedure TfrmSmallScreen.Timer1Timer(Sender: TObject);begin myConnected;end;procedure TfrmSmallScreen.myConnected;begin ClientSocket.Socket.Close ; ClientSocket.Open ; //打开套接字连接 Application.ProcessMessages;end; 直接在ClientSocketError事件将ErrorCode := 0;即可,其它的处理随你了.我就是这样处理的,没有遇到任何问题. image控件怎样将改扩展名后的图片文件装入? 求一个pop3邮件程序源代码 如何读取一个double类型的数据文件! c++可以操作;是不是delphi不行呢? 请问如何得到字段的小数位数属性? 请问有关于DELPHI6.0的制作安装程序的书吗? 关于MDI窗口的简单问题 请大虾们帮个忙!!谢谢 关于窗体最大化的问题 一存储过程的问题 急问,怎么用JBUILDER3生成可执行文件,谢谢! 关于FTP问题 FastReport的简单问题,动态打印dbgrid一列信息。
好像问题出在定时发送接受上,就连indy/Domes/chat都有这样的问题,server端不能先掉线,
我总不能保证网络总是通畅!我试着在onDisconnected里写代码让定时器停掉可是还是有问题,
还是过用try/except做异常处理也不行!
我差了很多例程,都没有考虑服务器端先掉线怎么办!都是报错
我要做一个监控通信软件,客户端每0.5秒给服务器发送信息(最多有15个客户端),服务器端接收并显示
然后再做判断发给另外的客户端
请问用idtcpserver/idtcpclient可以满足要求吗?
我是第一次用indy开发通讯软件
帮帮我吧!!!!
你可以通过idtcpclient控件判断是否连接的,连接的才发送啊
try
str:=idTCPClient1.ReadLn();
........
except
Exit;
end;改了之后调试时(即用Delphi上的运行时)还会有错,直接执行编译的exe就不再提示出错了.
//当断开与服务器端的连接时发生
procedure TfrmSmallScreen.ClientSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
tbSend.Enabled := False;
tbDisconnected.Enabled := False;
StatusBar.Panels[0].Text := '已经断开与与服务器的连接!等待连接到服务器...'; if ISCLOSE then //服务端主动关闭连接
close;
if (not ISCLOSE) and ISSocketConnect then //连接成功后的异常断开
begin
Timer1.Enabled:=True;
ISSocketConnect:=False;
end;
end;//当与服务器端的连接发生错误时
procedure TfrmSmallScreen.ClientSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
//StatusBar.Panels[0].Text := '与服务器端的连接发生错误';
ErrorCode := 0;
myConnected;
end;procedure TfrmSmallScreen.Timer1Timer(Sender: TObject);
begin
myConnected;
end;procedure TfrmSmallScreen.myConnected;
begin
ClientSocket.Socket.Close ;
ClientSocket.Open ; //打开套接字连接
Application.ProcessMessages;
end;
即可,其它的处理随你了.我就是这样处理的,没有遇到任何问题.