使用ClientSocket 长时间连接不上服务器就会出现错误,该怎样解决,意思是长时间连接不上的话,只要服务器那里打开,还能够连接上。 ( 积分: 80 )

  • 主题发起人 主题发起人 980
  • 开始时间 开始时间
9

980

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Timer4Timer(Sender: TObject);
begin
if StatusBar1.Panels[3].Text<> '系统联机成功' then
begin
ClientSocketas.Host:=trim(E_asip.text);
ClientSocketas.Open;
end;
end;

procedure TForm1.ClientSocketasConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.Panels[3].Text := '系统联机成功';
end;

procedure TForm1.ClientSocketasConnecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.Panels[3].Text := '系统联机. . .';
end;

procedure TForm1.ClientSocketasDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.Panels[3].Text := '系统断开连接';
end;

procedure TForm1.ClientSocketasError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
StatusBar1.Panels[3].Text := '系统联机错误';
Socket.Close;
errorcode:=0;
end;

使用ClientSocket 长时间连接不上服务器就会出现错误,该怎样解决,意思是长时间连接不上的话,(只要服务器那里打开,还能够连接上)。服务器长时间不打开的话,客户端就会“StatusBar1.Panels[3].Text := '系统联机错误'” 上面是我的全部代码,请各位详细指点
 
procedure TForm1.Timer4Timer(Sender: TObject);
begin
if StatusBar1.Panels[3].Text<> '系统联机成功' then
begin
ClientSocketas.Host:=trim(E_asip.text);
ClientSocketas.Open;
end;
end;

procedure TForm1.ClientSocketasConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.Panels[3].Text := '系统联机成功';
end;

procedure TForm1.ClientSocketasConnecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.Panels[3].Text := '系统联机. . .';
end;

procedure TForm1.ClientSocketasDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.Panels[3].Text := '系统断开连接';
end;

procedure TForm1.ClientSocketasError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
StatusBar1.Panels[3].Text := '系统联机错误';
Socket.Close;
errorcode:=0;
end;

使用ClientSocket 长时间连接不上服务器就会出现错误,该怎样解决,意思是长时间连接不上的话,(只要服务器那里打开,还能够连接上)。服务器长时间不打开的话,客户端就会“StatusBar1.Panels[3].Text := '系统联机错误'” 上面是我的全部代码,请各位详细指点
 
隔一段时间往服务器发送一点数据,保持连接
 
我的意思是 服务器不打开,客户端一直怎样保持连接,一直等到服务器打开为止
 
隔段时间连接一次,或者在服务器那边打开的时候给你发个信息
 
楼上的 我上面的time 不是隔段时间连接一次吗,问题是 客户端 “长时间” 的隔段时间连接一次 ,时间太长了 ,他就不能在连接了,意思是服务器打开了,客户端也连接不上了,从新启动客户端就能够连接上
 
看代码很简单,基本没什么好说的
有可能出问题的地方:
1. E_asip.text 在这个长的时间里面变动了
2.用ClientSocketas.Active := True代替 ClientSocketas.Open;
用ClientSocketas.Active := false 代替 ClientSocketas.close;
3. 不要简单的设置errorcode=0, 要先把errorcode取出来分析原因,
在delphi帮助中 搜索 "WinSock Error Codes" 可以查看错误列表
 
TIdTCPClient
把你的Timer的Interval设置成5s的话,你用YouClient.Connect(3000)来连接服务器,再添加上Try...Except...End来捕获异常,应该就不会出现问题。
 
谢谢了 ,好几天没有登陆上来,今天才找到能上来的方法,谢谢大家了
 
一个笨办法可以解决这个问题
每次定时连接的时候建立一个 ClientSocketas实例,超时后free掉
这样就不会出错了。
 
to :masm 每次定时连接的时候建立一个 ClientSocketas实例,超时后free掉
可以具体点吗?谢谢了
 
try
try
ClientSocketas:=TClientSocketaas.creat(nil);
ClientSocketas.connect();
...
except
超时错误
end;
finally
ClientSocketas.free;
end;
 
to masm, 你说的我按照作了 TClientSocketaas 你这个是动态定义的吧
应该类似
var ss:TClientSocket; 这个样子把

他没有ClientSocketas.connect();这个啊
可以在详细点吗
 
procedure TForm1.Timer4Timer(Sender: TObject);
begin
if not ClientSocketas.Active then
begin
ClientSocketas.Host:=trim(E_asip.text);
ClientSocketas.Open;
end;
end;
 
TCP连接要做心跳检测,否则长时间没有数据收发,这个连接会无效。而且得不到任何断开的通知。
 
我到还发现一个问题,那就是当客户端设为无堵塞连接方式时,当服务器没有开时,连接出错,而且ClientSocketas出错时连错误都无法用TRY EXCEPT END等捕获,真是怪事.请哪位再指点.
 

Similar threads

后退
顶部