Java Socket连接的问题

发布于 2022-09-12 03:58:49 字数 595 浏览 29 评论 0

我有一个客户的项目需要访问他们内网的服务,但又要接受互联网的回调,因此部署了两套,一套在他们的内网服务器上,使用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方法,但是使用过程中遇到了到一定的时间连接必断开的问题,一方是发送数据异常,而一方是读取数据异常。有人能详细解释下这是为什么吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜无邪 2022-09-19 03:58:49

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

单身狗的梦 2022-09-19 03:58:49

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文