【200分】Clientsocket自动重连的问题(200)

  • 主题发起人 主题发起人 chain0509
  • 开始时间 开始时间
C

chain0509

Unregistered / Unconfirmed
GUEST, unregistred user!
ClientSocket和服务器相连接,此时若服务器突然断开后再开启时,ClientSocket发送的数据服务器是收不到的,需要和服务器重新连接后才能收到,我想问的是 用什么方法可以实现自动重新连接呢?最好给点代码,我用Timer控件,每秒检查一下,但是发现不行,发送第二次数据后就报错了(无用的指针),服务器是客户的,只给了端口号和IP 不知道用的是什么 如果有大侠用其他空间可以实现的 麻烦一并送上 谢谢了
 
将COM或客户端所有接口重新动态连接一次就正常了。
 
to bbscom可否说的再具体一点,最好能有详细的代码做参考
 
有发送数据超时的设置。判断数据发送超时,则ClientSocket再连接一次,再次发送数据。
 
to 草原骏马,断开重连的代码我已经写好了 如下procedure TForm1.Conn;var iTimeOut: Integer;//´ÓOpenµ½ÏÖÔÚ¾­¹ýµÄÃëÊýbegin bFailToConn := False; Clientsocket1.Open; tmBegin := Time; while (not Clientsocket1.Active)do begin Application.ProcessMessages; if bFailToConn then begin //MessageBox(Handle, PChar('ÎÞ·¨Á¬½Óµ½Ä¿µÄ¼ÆËã»ú.'), 'Á¬½Óʧ°Ü...', MB_ICONERROR); Memo1.Lines.Add('Á¬½Óʧ°Ü,ÎÞ·¨Á¬½Óµ½Ä¿µÄ¼ÆËã»ú.'); Memo1.Lines.Add('ÕýÔÚÖØÐÂÁ¬½Ó£¬ÇëÉÔºò.'); Clientsocket1.Close; exit; end; iTimeOut := StrToInt(FormatDateTime('ns' , Time - tmBegin)); if iTimeOut >= 5 then//³¬Ê±5Ãë begin //MessageBox(Handle, PChar('ÒòΪ³¬Ê±£¬ÎÞ·¨Á¬½Óµ½Ä¿µÄ¼ÆËã»ú.'), 'Á¬½Óʧ°Ü...', MB_ICONERROR); Memo1.Lines.Add('ÒòΪ³¬Ê±£¬ÎÞ·¨Á¬½Óµ½Ä¿µÄ¼ÆËã»ú.'); Memo1.Lines.Add('ÕýÔÚÖØÐÂÁ¬½Ó£¬ÇëÉÔºò¡£'); Clientsocket1.Close; exit; end; end;end;但是,现在有一个问题,就是只能连一次,如果一次连不成功的话,程序运行就结束了,我想问的是应该在哪里加继续执行TForm1.Conn的代码 应该怎么加?
 
在服务端Com再增加一个函数,用于测试连接的,例如叫TestConnect,定义函数就可以,什么代码也不需要写;在客户端,每次调用服务端函数前,执行客户端的一个函数CheckConnect,函数代码如下procedure CheckConnect;var B:Boolean;begin try B:=True; 调用服务端TestConnect过程 except B:=False; end; if not B then begin Clientsocket1.Close; 重新连接(),重新连接时,不加异常控制,便于无法连接时触发异常。 end;end;
 
你的代码可以更改为:procedure TForm1.Conn;var tmBegin:Dword;begin tmBegin := Windows.GetTickCount; Clientsocket1.Close; while (not Clientsocket1.Active) do begin try Clientsocket1.Open; except end; if Clientsocket1.Active then Break; Application.ProcessMessages; //MessageBox(Handle, PChar(''), '', MB_ICONERROR); Memo1.Lines.Add(''); Memo1.Lines.Add(''); Clientsocket1.Close; if GetTickCount-tmBegin >= 5000 then begin //MessageBox(Handle, PChar(''), '', MB_ICONERROR); Memo1.Lines.Add(''); Memo1.Lines.Add(''); Break; end; end;end;
 
to znxia 服务器端不是我们的,不受我们的控制的
 
108673820@qq.com 发我信箱 我给你一个例子
 
哦,服务端不是你们的。那我更改的你的代码,也不可以?
 
接受答案了.
 
后退
顶部