2017-02-20 111 views
0

我正在致力于一个涉及GSM/GPRS模块的项目,其作用是通过互联网使用TCP-IP和Modbus协议将客户端与某些设备连接。现在我正在研究TCP连接方案。通过GPRS的TCP-IP与Modbus

据我了解,如果一段时间内没有任何流量,GSM网络会自动关闭TCP连接。

我想检测和维护TCP连接尽可能可靠。还要检测半开连接。

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

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

现在,如果由于其他原因(由于电源故障,GSM网络等)而导致连接断开,客户端需要能够再次与模块连接。该模块必须检测断开的连接并且必须采取措施以便客户端可以再次重新连接到它

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

问题是:如何解释这个“重新建立”连接?

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

  2. 我应该关闭当前的TCP连接并尝试连接到上一个有效的TCP连接提供的客户端的端口和IP吗?

问题是,该模块必须尽快提供以回答客户的要求;这就是为什么我需要尽快使TCP连接正常工作的原因。

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

回答

1

的问题是:如何解释这个连接“重建”?

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

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

否。服务器应该确定连接已经结束,并关闭单独连接的套接字。无需再试听。在开始时完成的listen仍应保持良好。

我应该关闭当前的TCP连接并尝试连接到上一个有效的TCP连接提供的客户端的端口和IP吗?

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

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