社区
通信技术
帖子详情
java Socket通信心跳包的断开问题
wxjs360
2017-07-17 11:39:53
下面是我新建的一个socket、连接然后每隔10秒给服务端发送心跳数据
下图是服务端那边因主动或者异常关闭之后,我这边还继续发送了心跳数据而产生的异常。不知道如何解决因异常断开之后,如何重启这个socket问题,又没有会的大神帮小弟解决,在线等,谢谢了!
...全文
1499
12
打赏
收藏
java Socket通信心跳包的断开问题
下面是我新建的一个socket、连接然后每隔10秒给服务端发送心跳数据 下图是服务端那边因主动或者异常关闭之后,我这边还继续发送了心跳数据而产生的异常。不知道如何解决因异常断开之后,如何重启这个socket问题,又没有会的大神帮小弟解决,在线等,谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_39985901
2017-11-10
打赏
举报
回复
keepThread和recvThread这两个类怎么实现的
RKGG爱吃鱼
2017-10-13
打赏
举报
回复
楼主,在Android中,彻底关闭应用后,心跳连接还存在,怎么断开啊?
wxjs360
2017-09-06
打赏
举报
回复
成改好了。就是做个简单的改动,可以看下事例代码 public FullDuplexClientDemo(String ip) { try { // socket = threadConnect.get(); // if (socket == null) { socket = new Socket(ip,Integer.valueOf(ConfigUtils.properties.getProperty("CRScannerPort"))); // threadConnect.set(socket); if (tKeep.isAlive() == false && tRecv.isAlive() == false ) { tKeep.start(); tRecv.start(); } // } outStr = socket.getOutputStream(); inStr = socket.getInputStream(); islive = true; } catch (Exception e) { e.printStackTrace(); new WarningDialog(MessageResource.getMessage("MainFrame.TabbedPane.Error", Language.getLocale())+"-Err1007"); socket= null; }
微微一笑满城空
2017-08-29
打赏
举报
回复
楼主弄出来没?让咱也参考下下...
wxjs360
2017-07-24
打赏
举报
回复
谢谢了,我只是了解一个思路的,不用麻烦你坐其他的。我先用你这个思路做一下看看
X-i-n
2017-07-24
打赏
举报
回复
直接放图你是想让别人帮你把所有代码再敲一遍吗?还是截图,保存,修改,再上传? try里,第一句去掉,外层的if判断也去掉,直接跑if里面的代码就行。原来的代码只有在new threadConnect对象的时候才会new socket,断开重连的时候,先会获取threadConnect对象的socket,这个socket哪怕断开,仍然是一个存在的对象,永远不会等于null,所以if里的new socket永远不会执行。 手工设置socket=null也可以,但是正确方法应该是threadConnect.set(null)(前提是set方法不对传入的参数做null判断),而不是socket = null。
wxjs360
2017-07-24
打赏
举报
回复
我不清楚那个socket断开之后,为什么getlocal还是原来的那个通信?
我尝试过close,也尝试过socket=null,但是debug看程序的时候不管异常端还是我close,get出来的都是第一次建立的那个连接,不让我重新new。这点我是不能理解,麻烦帮我解释下,谢谢
X-i-n
2017-07-19
打赏
举报
回复
socket对象没有必要复用,每次new client的时候,不用判断if(socket==null),直接new一个socket出来。
wxjs360
2017-07-18
打赏
举报
回复
这位大哥,你说的两种方法确实是两种需求(我两种需求都可行),但是我的问题是socket,close掉之后,我在重新new一个通信客户端类会出现socket已经关闭的异常。不断重新尝试连接会出现我那个IO流通道中的异常,是通信已经断开了,我没有及时监测到还在往服务端发送东西,就会出现问题。这是困扰我的问题,并不是需求问题,这两个放法我都试过,就是没能解决这个问题
X-i-n
2017-07-17
打赏
举报
回复
需求是什么,服务器断开以后,你想怎么处理? 可以在检测到异常断开以后不断重新尝试连接,也可以直接close这个socket,这取决于你的业务。
c#编写的基于
Socket
的异步
通信
系统封装DLL--SanNiuSignal.DLL
SanNiuSignal是一个基于异步
socket
的完全免费DLL;它里面封装了Client,Server以及UDP;有了这个DLL;用户不用去关心心跳;粘包 ;组包;发送文件等繁琐的事情;大家只要简单的几步就能实现强大的
通信
系统;能帮助到大家是本人觉得最幸福的事情,也希望大家 在用的过程中找出DLL中不足的地方;好改正;此DLL的苹果版和
java
版正在努力开发中......交流QQ:365368248;此演示源码下载地址:http://pan.baidu.com/s/1eQw1npw 里面包括了SanNiuSignal.DLL 下面为大家介绍一下 如何使用SanNiuSignal. 1 ) :TCPServer服务器,通过静态方法TxStart.startServer注册成功服务器ITxServer;然后通过ITxServer设置好各种属性;最后启动 ITxServer.StartEngine();就可以了;具体可以到demo里去看;相对来说比较简单,下面来说一下需要注意的地方 一:ITxServer.BufferSize,就是接收数据缓冲区大小;默认为1kb,不要小于50字节,而且要和客户端设置成一样;否则会出现不可预知 的错误;这个缓冲区的大小,不会影响你每次发送数据的大小;大小只能提高你的发送速度 二:ITxServer.sendMessage 发送前先判断此IPEndPoint客户端是否在线;因为如果不在线等情况发生;此方法没有任何消息产生;如 果发送成功并且对方已经收到;会触发发送成功的事件; 三:用户可以通过ITxServer.FileLog记录服务器的运行信息; 2 ) :TCPClient客户端,通过静态方法TxStart.startClient(服务器地址或网址, 服务器端口号)注册成功客户端ITxClient;然后通过 ITxClient设置好各种属性;最后启动ITxClient.StartEngine();跟服务器启动差不多;具体可以到demo里去看;客户端要注意的一些地 方 一:如果非服务器强制关闭客户端的情况下,掉线的话,客户端默认是要重连的;他的原理是这样的,每10秒重连一次;重连 ITxClient.ReconnectMax次如果失败;会自动关闭客户端引擎;在重连的过程中;你可以改变客户端连接服务器的IP地址和端口号;但 如果当
断开
的时候不想重连;可以设置ITxClient.ReconnectMax=0; 二:登录篇,在引擎启动之前,用户可以设置ITxClient.OutTime来设置超时时间;默认为10秒,也就是说10秒之内肯定会有一个登录结果 ;登录成功或登录失败。有了登录结果会触发登录结果事件; 3 ) :Udp引擎,通过静态方法TxStart.startUdp()注册成功UDP--IUdpTx;然后通过IUdpTx设置好各种属性;最后启动 IUdpTx.StartEngine();如果在启动之前要绑定端口号,请在这里设置IUdpTx.Port;否则是随机使用本地端口;无论是UDP还是服务器和 客户端;它们的很多方法和属性以及事件都是相同的,因为他们都继承了
通信
系统的基接口ITxBase;下面是UDP引擎要注意的地方 一:UDP的优势在于速度快但不太可靠;所以有些属性不能设置的太过,如IUdpTx.BufferSize;默认为1KB,如果在广域网上发送信息, 缓冲区大小不要超过默认值;否则数据会丢失,如果一次性数据大于1KB;也没事,系统会自动分包发送;不太会丢包。 4 ) :文件发送系统,通过静态方法FileStart.StartFileSend(IFileSendMust)生成一个文件发送系统IFileSend;其中IFileSendMust是 必须实现的一个接口;具体参照demo;然后通过IFileSend设置好各种属性;发送还是要通过前面的三个引擎系统发送的;如 ITxClient.SendFile 这时会返回一个文件标签,是一个整数;IFileSend可以通过操作这个标签来操作这个正在发送的文件;接收文件 系统也一样;也是通过文件标签来操作;文件续传也是一样,也要通过前面的三个
通信
引擎系统进行续传;因为文件系统不能决定用户 通过哪个
通信
系统进行续传的;例如IUdpTx.ContinueFile进行续传;大家也可以试一下 掉线之后重新连接也可以续传; 5 ) :文件接收系统,通过静态方法FileStart.StartFileReceive(IFileReceiveMust)生成一个文件接收系统IFileReceive;其中 IFileReceiveMust是接收方必须实现的一个接口;具体参照demo;然后通过IFileReceive设置好各种属性;下面来讲讲文件系统要注意 的几个要点 一:每个文件都有一个文件标签,发送系统和接收系统是通过控制这个标签来控制这个文件的;如果是同一个文件传输,标签也一样的; 二:要注意属性BufferSize缓冲区大小,他是代表一次传送的字节数;如果这个文件缓冲区越大,传输速度越快;具体要设置成多少,大 家自己去调试;TCP传输的话一般可以设置成比较大,但UDP的话这个不要超过1KB;所以传输大文件尽量不要用UDP这种不可靠的东东; 三:当网络等各种原因中断文件的时候;会触发文件中断事件;文件自动处于暂停发送或接收状态;等待续传;续传的发送方,如果对方 同意续传;对方将不会触发续传开始的方法;别的大家可以通过demo里去发现; 总结: 其实这个DLL相对来讲是比较简单的;大家只要掌握这五个接口;1:ITxServer TCP服务器接口 2:ITxClient TCP客户端接口 3:IUdpTx UDP接口 4:IFileSend 文件发送方接口 5:IFileReceive 文件接收方接口 前面三个接口是通过TxStart启动;后面二个文件接口 是通过FileStart启动 今天先讲到这里;希望这个DLL对大家有所帮助;不足之处希望通过QQ或博客园大家一起交流;谢谢 此演示源码下载地址:http://pan.baidu.com/s/1eQw1npw 里面包括了SanNiuSignal.DLL
java
socket
编程心跳_
Java
Socket
编程
心跳包
创建实例解析
1.什么是
心跳包
?
心跳包
就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做
心跳包
。用来判断对方(设备,进程或其它网元)是否正常运行,采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经离线。用于检测TCP的异常
断开
。基本原因是服务器端不能有效的判断客户端是否在线,也就是说,服务器无法区分客户端是长时间在空闲,还是已经...
java
socket
心跳包
_
socket
中的短连接与长连接,
心跳包
示例详解
TCP连接简介当网络
通信
时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:一、长连接与短连接长连接: 指在一个TCP连接上可以连续发送多个数据包,在TCP连...
Java
Socket
通信
及
心跳包
最近android项目中有需要用到
Socket
与服务器连接的项目,自己之前没有使用过
Socket
套接字这种方案,所以对
Socket
通信
机制就是个也很有限,领导在会议上讲
Socket
通讯呢就是客户端和服务器端先进行一次握手,双方同意后就可以进行数据传送。我心里最反感别人说这句话如果是大学老师第一次给我们讲
Socket
概念的话,这话我乐意听。对这有开发经验的程序员竟然还这么跟我介绍
Socket
,我要的
java
web
socket
心跳包
_web
socket
心跳包
的实现方案
web
socket
心跳包
的实现方案05/30/2010现在网络环境错综复杂,
socket
心跳包
是获得健康强壮的连接的有效解决方案,今天,我们就在web
socket
中实现
心跳包
方案,是的,尽管我们只是做一个简单的聊天室,但我们让他稳定可靠一些一点也没有错。我的
心跳包
方案很是简单,原理就是间隔发送
心跳包
数据给服务器,服务器在一定时间内发回
心跳包
响应,对比超时限定,如果超过设定的超时时间,则认为当...
通信技术
4,356
社区成员
28,926
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章