1

服务器收不到Socket数据的原因


Socket是大家使用Cat.1模块常用的功能之一,但Cat.1模块不是直接跟服务器连接,而是通过NAT(即网络地址转换)与服务器连接。

一个会话建立后会在NAT设备上建立一个关联表,在会话静默的这段时间,NAT网关会进行老化操作。

这是任何一个NAT网关必须做的事情,因为IP和端口资源有限,通信的需求无限,所以必须在会话结束后回收资源。

NAT会维护一个映射表,这个映射表会定时检查:

如果10分钟内这路Socket跟服务器没任何数据往来,就会回收这路的地址,10分钟后应用上再发数据就找不到路由地址了。——这个就是发送数据提示成功,服务器却收不到任何数据的原因。

如果10分钟内有数据更新,计时器会重置为10分钟。

2

两种方法轻松解决


接下来我们着重讲解,合宙Lua版本Cat.1模块维持Socket连接不掉线的两种方法。

方法一:在应用层发心跳包数据


这种方式模块会在应用层发送明文数据,以维持Socket连接不掉线。

合宙提供的上层软件中的:

\demo\socket\sync\sendWaitRecv\longConnection 示例,支持应用层心跳包的发送(见socketOutMsg.lua脚本)。

最新版上层软件下载地址详见:

http://doc.openluat.com/article/1334/0

第一步:建立socket客户端

socketClient=socket.tcp()

第二步:连接服务器

socketClient:connect(“mydomain.aa.bbb”,“12345”)
注:mydomain.aa.bbb为服务器地址和12345为端口号, 因为仅为示例,所以皆为虚构.

第三步:发送数据

socketClient:send(data)

详细内容参见上层软件示例。

方法二:采用保活探针方式


这种方式是TCP协议层实现的,只适用于TCP连接。也就是说,这种实现方式不会对应用层的数据流产生任何影响,应用层也看不到心跳包的内容。

这种实现方式叫做——TCP保活探针(TCP Keep-Alive Probe)。

该方式是用socket的属性参数设置socketcore.sock_setopt()这个API来实现的。示例如下:

if socket.isReady() then

 --创建一个socket tcp客户端

 local socketClient = socket.tcp()

 --阻塞执行socket connect动作,直至成功

 local result,id = socketClient:connect("mydomain.aa.bbb","12345") 

 if result then

 log.info("socketClient.id = ",id)

 --开启保活功能

 socketcore.sock\_setopt(id,socketcore.SOL\_SOCKET, socketcore.SO\_KEEPALIVE,1) 

 --在300秒内,链接上无任何数据交互,则发送初始保活探针

 socketcore.sock\_setopt(id,socketcore.IPPROTO\_TCP, socketcore.TCP\_KEEPIDLE,300)

 --如果保活探针发送失败,60s再次重传

 socketcore.sock\_setopt(id,socketcore.IPPROTO\_TCP, socketcore.TCP\_KEEPINTVL,60)

 --保活探针的最大重传数量为3

 socketcore.sock\_setopt(id,socketcore.IPPROTO\_TCP, socketcore.TCP\_KEEPCNT,3)

 end

end

做完这些设置后,TCP Socket连接就能一直保持不掉线。

上海合宙通信模块 - 合宙Luat,让万物互联更简单

合宙Luat | Cat.1 Socket数据收不到?学会两招不掉线的更多相关文章

  1. 合宙Luat | 一文读懂LuaTask延时,看我如何从《射雕英雄传》角度分析。

    武侠小说中,主人公之所以能纵横江湖,常常离不开一样可遇不可求的绝世法宝--武功秘籍.如今勇于尝试的开发者,笃定地告诉后来者:选Luat二次开发,就如同拥有了物联网开发的武功秘籍. 本期让我们通过< ...

  2. 合宙Luat直播间即将开启,你揭开行业奥秘,让你快人一步。

    嗨~刚陪你们过儿童节 和你们一起成长的合宙Luat 又有新计划 -- 合宙Luat官方直播即将开启 - 敬请关注 - - 官方直播什么内容 - 可能是合宙研发动态 可能是新品发布资讯 可能是行业大咖分 ...

  3. 合宙Luat | 电源设计——模块应用必看的2个要点

    在模块应用设计中,电源设计是很重要的一部分. 由于射频发射时,会在短时间有一个较大电流的突发脉冲.在突发脉冲阶段内,电源必须能够提供高的峰值电流,不然有可能会引起供电电压的跌落.   而很多初学的朋友 ...

  4. 合宙模块LUA相关资料汇总

    1. 目录 1. 目录 [2. LUA二次开发](#2. LUA二次开发) 2.1 [新手教程](#2.1 新手教程) 2.2 [进阶教程](#2.2 进阶教程) 2.3 [LUA开发环境](#2.3 ...

  5. 合宙模块AT相关资料汇总

    1. 目录 1. 目录 [2. 新手教程](#2. 新手教程) [3. 产品资料](#3. 产品资料) 3.1 [2G模块(GPRS / GPRS+GNSS)](#3.1 2G模块(GPRS / GP ...

  6. C# Socket Server 收不到数据

    #/usr/bin/env python # -*- coding: utf- -*- # C# Socket Server 收不到数据 # 说明: # 最近在调Python通过Socket Clie ...

  7. AS3: Socket 数据包 收 发

    AS3.0中使用Socket使用tcp服务器协议,它是一种流协议,不停的将分片传输给客户端,P作为流,发包是不会整包到达的,而是源源不断的. 它不同于UDP服务器协议,UDP作为数据包协议,整包到达. ...

  8. C# 实现的多线程异步Socket数据包接收器框架

    转载自Csdn : http://blog.csdn.net/jubao_liang/article/details/4005438 几天前在博问中看到一个C# Socket问题,就想到笔者2004年 ...

  9. 合宙AIR105(四): SPI, MAX7219 8x8LED驱动

    目录 合宙AIR105(一): Keil MDK开发环境, DAP-Link 烧录和调试 合宙AIR105(二): 时钟设置和延迟函数 合宙AIR105(三): 定时器, 定时器中断和PWM输出 合宙 ...

随机推荐

  1. Mac 解压缩软件-keka

    去官网 GitHub地址 功能预览

  2. git的一些常用命令总结

    1.拉取代码Git clone  "链接名称" 2.新建分支 git checkout -b "分支名称" 3.提交代码步骤 (1)Git status查看项目 ...

  3. 利用cm压缩包手动安装cm和cdh

    安装准备: 1.操作系统为centos6.9 CentOS-6.9-x86_64-bin-DVD1to2 2.安装Oracle JDK (1.8u121) 下载jdk-8u121-linux-x64. ...

  4. 使用C#进行数据库增删改查ADO.NET(三)

    文章代码如下: class Program { static void Main (string[] args) { //连接数据库 string connString = "server= ...

  5. 消息队列RabbitMQ(二):RabbitMQ的系统架构概述

    前言 RabbitMQ是基于AMQP协议的,要想深入理解RabbitMQ,就必须先了解AMQP是个什么东东? AMQP协议 AMQP即Advanced Message Queuing Protocol ...

  6. JVM内存溢出后服务还能运行吗

    文章开篇问一个问题吧,一个java程序,如果其中一个线程发生了OOM,那进程中的其他线程还能运行吗? 接下来做实验,看看JVM的六种OOM之后程序还能不能访问. 在这里我用的是一个springboot ...

  7. 技能Get·解决MSSQL Where查询中文数据存在但查不出来

    阅文时长 | 0.33分钟 字数统计 | 294.4字符 主要内容 | 1.引言&背景 2.声明与参考资料 『技能Get·解决MSSQL Where查询中文数据存在但查不出来』 编写人 | S ...

  8. 真正的原生JS数据双向绑定(实时同步)

    真正的原生JS数据双向绑定(实时同步) 接触过vue之后我感觉数据双向绑定实在是太好用了,然后就想着到底是什么原理,今天在简书上看到了一位老师的文章 js实现数据双向绑定 然后写出了我自己的代码 wi ...

  9. [DB] HDFS

    体系架构 NameNode HDFS主节点.管理员 接收客户端(命令行.Java程序)的请求:创建目录.上传.下载.删除数据 管理和维护HDFS的日志和元信息 日志文件(edits文件) 二进制文件, ...

  10. 分布式存储ceph---ceph概念及原理(1)

    一.Ceph简介: Ceph是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统.ceph 的统一体现在可以提供文件系统.块存储和对象存储,分布式体现在可以动态扩展.在国内一些公司的云环 ...