问答

Java Socket连接的问题

作者:admin 2021-06-09 我要评论

我有一个客户的项目需要访问他们内网的服务,但又要接受互联网的回调,因此部署了两套,一套在他们的内网服务器上,使用192.168.x.x的IP(简称A点),但是能访问...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

我有一个客户的项目需要访问他们内网的服务,但又要接受互联网的回调,因此部署了两套,一套在他们的内网服务器上,使用192.168.x.x的IP(简称A点),但是能访问外网,另一台则部署在阿里云上面,有固定的IP(简称B点),两个服务通过socket进行通信,由A点主动连接B点,并且B点在有客户端连接之后,就不再接受其它的客户端连接。但是有一个问题是A点可能用的是普通电信宽带网络,外部IP是动态的,随时都有可能改变,就导致和B点的通信不稳定,当然外部IP变化的时候A点会断开连接捕获异常进行重连,但是B点就一直没有异常抛出,通常要等十多分钟到半小时左右,才会有一个连接超时的异常抛出,因此A点常常不能在断开后立即连接上B点,我在B点上有心跳探测,每隔30秒就会给A点发送一次数据,以保持连接不断,在A点的对外IP变了之后,B点仍然能“正常”发送心跳,不会有任何异常抛出。

我就觉得很奇怪,为什么A点能捕获连接异常,但是B点就没有问题,关键是断开后还能正常发送数据,TCP发包不是要判断对方收到没有吗?没收到就会重新发包,但是为什么B点能一直发送客户端收不到的包呢?

另外最早在网上看到发送心跳使用sendUrgentData方法,但是使用过程中遇到了到一定的时间连接必断开的问题,一方是发送数据异常,而一方是读取数据异常。有人能详细解释下这是为什么吗?

###

1.从你描述来看这个问题是是可能发生的,要吗可以传送数据,要吗不可以传送数据
2.A点公网IP变化的可能性很小,通常情况下之后A点拥有公网IP的设备重启时IP才会改变
3.对于你上述的业务需求,推荐使用web-socket实现 A点作为web-socket客户端,B点作为web-socket服务端,双方互相发送数据

###

怎么不尝试在a和b建立一个隧道呢,linux是比较稳定的,windows尝试下来不太行,基本上每隔个吧小时就要重启下隧道

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 视频网站播放弹幕的实现方式?

    视频网站播放弹幕的实现方式?

  • Pm2 启动vue问题

    Pm2 启动vue问题

  • JAVA中一个类A既继承一个基类B,基类B

    JAVA中一个类A既继承一个基类B,基类B

  • 企业微信能不能做推送功能?

    企业微信能不能做推送功能?

腾讯云代理商
海外云服务器