当前位置:  技术问答>java相关

怎样判断socket断开并自动重连?

    来源: 互联网  发布时间:2015-08-20

    本文导语:  在用socket通讯过程中经常会发生socket异常断开的情况,故请教各位高手 | 在每次要向服务器发送数据的时候判断socket是否断开,如果断开则连接。 如果要实现在没有向服务器发送请求的时候...

在用socket通讯过程中经常会发生socket异常断开的情况,故请教各位高手

|
在每次要向服务器发送数据的时候判断socket是否断开,如果断开则连接。

如果要实现在没有向服务器发送请求的时候也能检查是否断开,那就启一个线程,
再线程中不停的检查socket是否断开,如果是连接,则睡眠会,醒来继续检查是否断开。这样做需要消耗很多资源。如果你的系统认为保持连接非常重要的话就可采用这个办法。否则还是不要这样做的好。

|
楼上的方法效率很低哦。

你可以自定义一个监听器,catch到错误的时候,通知监听器,然后建立连接。

或者也可以用while(ture)循环

|
如果只用线程监测是否处于连接状态好像不行,资源浪费并且起不到应有的效果!
   因为是否连接良好是要在通讯的过程中监测的,Socket连接不在通讯状态的时候监测是否连接良好就没有什么意义了,也就是说你在传输数据的时可能连接会异常断开,这时候测试连接的线程肯定不可能在运行中(监测线程的优先级不可能比传输数据线程的优先级高吧)!除非你把优先级设得比较高,如果这样的话就太浪费资源了(辅助线程比主要线程的优先级高更是笑话),所以用监测线程就不大适合了。
   如果你需要在Socket连接不在使用中时仍然保持连接,比较折衷的办法是,其一,建立一个低优先级的监视线程,用来保持非通讯状态的连接完好。其二,用try...catch...来维持通讯过程中的连接良好(一旦通讯异常立即重新连接)!

|
try catch,在异常中重连。

|
isClosed
public boolean isClosed()
Returns the closed state of the socket. 

Returns:
true if the socket has been closed
Since:
1.4 
See Also:
close()

不过只能在1.4上用,而且是客户端有效,服务器端无法根据此函数判断

|
你要设置超时!!!!!

网络出错不是立即就发现的!!要判断是否超时!

搞明白网络传输的原理你就明白了!

    
 
 

您可能感兴趣的文章:

  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • 急问:怎么判断一个非阻塞的socket已经断开了?
  • socket问题,当客户端关闭或者实际链路断开后服务器端怎么判断?
  • 如何编程实现,判断本机网线是否断开?
  • 如何判断socket断开连接
  • 请问如何判断从raw socket发出的包是哪个进程发送的?
  • socket如何判断接受缓冲区是否已满
  • 如何判断SOCKET还是连接着的?
  • C下判断socket连接状态,怎么实现
  • socket编程,设为非阻塞,客户端怎么判断connect已经成功呢?
  • (linux c)socket数据接受后判断是否相等的问题
  • 关于socket的sk_buff,如何判断这个sk_buff是不是完整的?
  • AIX主机如何判断SOCKET连接对方的是什么进程
  • 在程序中如何判断一个socket链路在3分钟内没有收发任何信息?
  • 难道还有第3条分支???怎么判断 socket 的数据已经传输
  • 虚心请教Linux Socket编程中如何根据指纹信息判断端口服务
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Vectors 成员 empty():判断Vector是否为空(返回true时为空)
  • linux->shell-> if 条件判断,关于软连接的判断!
  • javascript操作html复选框checkbox:如何判断复选框是否被选中
  • shell如何判断文件是否存在,如何判断变量是否为空
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 怎么判断串口已经收到数据,并及时读出?怎么判断串口已经将写入的数据发送完毕?
  • java实现判断字符串是否全是数字的四种方法代码举例
  • 在判断自符是否等于**时,用equals(“**”),那么如果我想判断它的值是否>=2该用什么呢?
  • 我是学pb的,判断闰年的是isdate("2-28"),但在java里怎么判断呢?
  • linux 下的自解压文件是什么格式,如何判断文件是否为自解压c++或者脚本判断均可
  • mysql中如何判断当前是字符 mysql判断字段中有无汉字
  • 知道TCP/UDP的包头,如何判断其应用层协议类型,struct tcphdr和 struct udphdr结构中那个变量能判断应用层协议类型。
  • c#判断字符是否为中文的三种方法分享(正则表达式判断)
  • 如何判断在线用户,主要是如何判断用户关闭所有窗口(即他已经不在线了)?
  • 如何判断一个数是否为4的幂次方?若是,并判断出来是多少次方?
  • 判断图片-判断位图是否是黑白图片的方法
  • JQuery 判断某个属性是否存在hasAttr用法
  • 请问如何判断一个文件夹是否存在
  • 判断文件格式的c库函数
  • sftp命令如何判断成功与否?
  • Shell条件判断疑问?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3