Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Modbus的GPRS TCP-IP协议_Tcp_Keep Alive_Modbus - Fatal编程技术网

基于Modbus的GPRS TCP-IP协议

基于Modbus的GPRS TCP-IP协议,tcp,keep-alive,modbus,Tcp,Keep Alive,Modbus,我正在参与一个涉及GSM/GPRS模块的项目,该模块的作用是使用TCP-IP和Modbus协议通过互联网将客户端与某些设备连接起来。现在我正在研究TCP连接方案 据我所知,如果一段时间内没有任何通信量,GSM网络会自动关闭TCP连接 我希望尽可能可靠地检测和维护TCP连接。还可以检测半开连接 连接过程如下:我的GSM模块充当服务器,因此它在端口502上打开一个套接字,等待客户端读取数据。客户端可以在3分钟或更长时间内定期读取数据 当客户端与我的模块连接时,它请求一些数据,模块发送请求的数据并等待

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

据我所知,如果一段时间内没有任何通信量,GSM网络会自动关闭TCP连接

我希望尽可能可靠地检测和维护TCP连接。还可以检测半开连接

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

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

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

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

问题是:如何解释这种重新建立的联系

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

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

关键是模块必须尽快可用,以响应客户的请求;这就是为什么我需要TCP连接尽快正常工作的原因

另外,该模块仅支持AT命令Quectel M95模块,因此我无法访问TCP堆栈的所有功能。 非常感谢。 我是TCP协议栈的新手,所以我可能使用了含义不正确的技术术语

问题是:如何解释这种重新建立的联系

理想情况下,客户端应该关心到服务器的连接。客户来来往往。服务器应继续侦听端口

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

否。服务器应仅确定连接已断开,并仅关闭该连接的套接字。不需要再次尝试聆听。开始时所做的倾听应该仍然有效

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

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


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

如果另一端支持,您可以考虑实现TCP保持活动的请求和响应

由于TCP希望应用程序能够处理这些问题,因此应用程序必须跟踪套接字状态并适当地关闭它们,即超时

需要时打开连接