首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Modbus的基于GPRS的TCP-IP协议

基于Modbus的基于GPRS的TCP-IP协议
EN

Stack Overflow用户
提问于 2017-02-20 07:58:44
回答 2查看 1.1K关注 0票数 0

我正在从事一个涉及GSM/GPRS模块的项目,该模块的作用是使用TCP和Modbus协议通过internet将客户端与某些设备连接起来。现在我正在研究TCP连接方案。

据我所知,如果有一段时间没有流量,GSM网络会自动关闭TCP连接。

我希望检测和维护TCP连接尽可能可靠。也是为了检测半开连接。

连接过程如下:我的GSM模块充当服务器,它在502端口上打开一个套接字,等待客户端读取数据。客户端可以在3分钟或更长时间内定期读取数据。

当客户端与我的模块连接时,它请求一些数据,模块发送所请求的数据并等待其他请求,并保持连接打开。

现在,如果由于其他原因(由于电源故障、GSM网络等原因)连接中断,客户端需要能够再次与模块连接。该模块必须检测断开的连接,并且必须执行操作,以便客户端能够重新连接到它。

为了检测断开的连接,模块定期向客户端发送一些虚拟数据,并检查该数据是否被客户端接收。否则,必须重新建立tcp连接.

问题是:如何解读这种“重建”的联系?

  1. 我是否应该关闭当前的TCP连接,并打开一个新的连接,这意味着再次侦听端口502?
  2. 我是否应该关闭当前的TCP连接,并尝试按照上次有效TCP连接提供的方式连接到客户端的端口和ip?

关键是模块必须尽快可用,以响应客户端的请求;这就是为什么我需要TCP连接尽快发挥作用。

PS。该模块只支持AT命令( Quectel M95模块),因此我不能访问TCP堆栈的所有功能。谢谢。(我是TCP堆栈中的新手,所以我可能使用了含义不恰当的技术术语)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-20 08:39:21

问题是:如何解读这种“重建”的联系?

理想情况下,客户端应该关注与服务器的连接。客户来来去去。服务器应该继续在端口上listen

我是否应该关闭当前的TCP连接,并打开一个新的连接,这意味着再次侦听端口502?

不是的。服务器只需确定连接是否已消失,并仅关闭该连接的套接字即可。不用再试着听了。一开始所做的listen应该仍然有效。

我是否应该关闭当前的TCP连接,并尝试按照上次有效TCP连接提供的方式连接到客户端的端口和ip?

服务器将最不关心客户端端口。它无法将连接到客户端。相反,客户端应该重新连接到服务器。

因此,在客户端内置智能,以查找断开的连接,并重新建立与服务器的连接。

票数 1
EN

Stack Overflow用户

发布于 2018-12-18 12:09:42

如果另一端支持,您可以考虑实现TCP KEEP_ALIVE请求和响应。

由于TCP期望应用程序处理这些,所以应用程序必须跟踪套接字状态并适当地关闭它们,即超时时.

在需要的时候打开连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42339235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档