SIM900同时连接两个服务器是可行的,核心做法是把模块切换到多IP模式(AT+CIPMUX=1),然后用带链路编号的AT+CIPSTART命令分别建立两条TCP连接。 这个能力来自SIM900自带的TCP/IP协议栈,不需要外接协议芯片,很多做远程数据采集的朋友一开始只连一台服务器,等需要主备上报或双平台推送时,才发现默认设置下第二个连接总是失败,下面把完整操作和排查方法拆开讲。
SIM900怎么同时连两个服务器:多IP模式是关键
SIM900默认工作在单IP模式,就像一部只能拨一位号码的座机,要让它同时连两个服务器,必须先切换到多IP模式,这个模式在模块手册里叫multiple connection,行业共识认为这是GPRS模块区分高低配的常用指标之一。
什么是多IP模式,为什么要开
SIM900的多IP模式允许建立最多6条TCP或UDP连接,每条连接有独立的链路编号(0到5),相比单IP模式只能维持一条链路,多IP模式可以让模块作为客户端同时访问多个远程服务器,比如一边把传感器数据发给业务服务器,一边把状态发给监控服务器。
实际操作中,很多人直接AT+CIPSTART连接第二个服务器,结果返回ERROR,就是因为没有先开启AT+CIPMUX=1,这个命令必须在建立任何连接之前设置,而且设置后需要重启模块才能生效。
确认你的SIM900固件支持多连接
不是所有SIM900硬件版本都开放了完整多IP功能,买模块时尽量选支持AT+CIPMUX=1的固件版本,通过AT+CGMR可以查询固件版本,通过AT+CIPMUX?可以查看当前模式,返回0表示单连接,返回1表示多连接模式。
如果模块是老版本固件,建议升级到较新的固件,否则就算打开了AT+CIPMUX=1,后续的AT+CIPSTART也可能返回错误,国内市场上大部分SIM900模块来自深圳、上海等地的模组分销商,购买时问一句“是否支持多路TCP”比事后折腾省心得多。
SIM900多服务器同时连接设置:AT命令实操
下面是一套经过验证的步骤,适用于SIM900A、SIM900D等常见型号,整个过程不需要写复杂脚本,用串口调试助手就能完成。
第一步:切换AT+CIPMUX=1并重启
将模块接上串口,发送:
AT+CIPMUX=1
模块返回OK后,发送:
AT+CFUN=1,1
这一步会让模块重启并启用完整功能,重启后,可以再次用AT+CIPMUX?确认模式已经变成1,有朋友发完AT+CIPMUX=1后直接CIPSTART,忽略重启这一步,第二个连接照样建立不起来。
第二步:激活GPRS数据链路
多IP模式下依然要先让模块附着到GPRS网络,按顺序执行:
AT+CSTT="CMNET"
AT+CIICR
AT+CIFSR
“CMNET”是中国移动的默认APN,联通卡用“3GNET”,电信卡用“CTNET”,如果AT+CIICR返回ERROR,检查sim卡是否插好、天线是否松动,AT+CIFSR返回的IP地址是模块本地地址,不代表公网IP,拿到它说明数据链路已经通了。
第三步:用链路编号分别连接两台服务器
数据链路激活后,就可以同时发起两条连接,假设服务器A的IP是192.168.1.10,端口8080;服务器B的IP是192.168.1.20,端口9090:
AT+CIPSTART=0,"TCP","192.168.1.10",8080
AT+CIPSTART=1,"TCP","192.168.1.20",9090
注意:多IP模式下的AT+CIPSTART命令必须在第一个参数位置加上链路编号,返回CONNECT OK表示该链路建立成功,如果域名访问,可以直接写域名,
AT+CIPSTART=1,"TCP","api.example.com",443
SIM900会自己解析域名,不需要额外使用AT命令。
第四步:收发数据时注意链路ID
发送数据时需要指定走哪条链路:
AT+CIPSEND=0
模块返回>字符后,输入要发送的内容,最后用十六进制0x1A(即Ctrl+Z)结束,接收数据时,串口返回的格式是:
+IPD=0,5:HELLO
其中0是链路编号,5是数据长度,后面紧接着数据内容,程序解析时一定要先读链路ID,再决定把数据交给哪个服务器逻辑,否则会串包。
SIM900连接两个服务器失败?从这几个地方排查
不少人在操作时遇到第二条连接建立不成功,或者连接上了但数据发不出去,按下面的优先级排查,多数问题能解决。
检查模块的软件版本和连接状态
先发送AT+CIPMUX?,确认返回值是1而不是0,如果返回0,说明重启步骤没执行干净,再发送AT+CIPSTATUS,这个命令会列出当前所有链路状态,正常能看到两条链路都是TCP CONNECTED,如果只有一条,说明第二条连接根本没建立。
检查服务器地址、端口和SIM卡流量
SIM900和服务器之间必须路由可达,用PC上的网络调试助手先在本地试一下服务器地址和端口,排除服务器防火墙拦截,另外GPRS网络下,模块获得的IP是运营商内网IP,服务器不能主动向模块发连接,只能由模块发起,用普通手机SIM卡时,确认套餐没有关闭上网功能,有些物联网卡有定向流量限制,需要关闭白名单才能连外部服务器。
对照常见报错处理
- ERROR:命令格式不对,或者当前状态不允许执行,检查AT+CIPSTART参数是否包含链路编号。
- CLOSED:连接被服务器或网络关闭,重新调用AT+CIPSTART发送连接请求。
- DNS FAIL:域名解析失败,检查APN设置,或者改用IP地址测试。
SIM900双服务器连接能用在哪些场景,是否值得选
既然能同时连两个服务器,应用空间就大了,比如野外气象站的传感器设备,一边把数据发送到本地中继服务器,一边备份到云平台;再比如车载定位器,一条链路连接运营商的定位服务器,另一条连接客户自己的调度系统,在这种场景下,SIM900几十元的模块成本比4G模块更有优势,对很多对带宽要求不高的设备来说,GPRS够用且便宜。
场景:主备服务器同时上报
数据同时发到主服务器和备用服务器,主服务器正常时,备用服务器只做数据存储;主服务器断线时,备用服务器无缝接管,SIM900同时维持两条TCP连接后,主备链路可以动态切换,不需要等断线检测再重连,大幅降低数据丢失概率。
SIM900与SIM800C的多连接对比
SIM900是SIMCom早期经典型号,SIM800C是它的升级替代品,两者都支持AT+CIPMUX多连接模式,但SIM800C在低功耗和网络兼容性上更好,价格相差不大,如果你是新设计产品,行业共识是优先考虑SIM800C,库存和供货都更稳定,下面用表格列出主要区别:
| 项目 | SIM900 | SIM800C |
|---|---|---|
| 最大TCP连接数 | 6 | 6 |
| 多IP命令 | AT+CIPMUX=1 | AT+CIPMUX=1 |
| 工作频段 | 四频 | 四频 |
| 休眠功耗 | 略高 | 更低 |
| 二次开发难度 | 相当 | 相当 |
如果你的设备已经用SIM900做了全套硬件设计,不需要换模块,双服务器功能完全够用,如果还在选型,SIM800C会更省电。
SIM900同时连两个服务器常见问题
SIM900最多可以同时连接几个服务器?
最多6个服务器,链路编号从0到5,但实际使用建议只开2到3条,因为SIM900的TCP缓存区有限,同时传输大量数据时可能出现丢包或串包。
为什么我设置AT+CIPMUX=1后,连接第二个服务器还是失败?
原因通常是打开AT+CIPMUX=1后没有重启模块,或者重启后没有重新激活GPRS链路,注意AT+CIPMUX=1只影响后续连接命令,已经存在的旧连接必须在设置前全部关闭,建议按上文顺序完整执行一次并确认AT+CIPSTATUS显示两条CONNECTED。
同时连两个服务器时,如何区分哪条链路收到数据?
看+IPD前缀后的第一个数字,该数字就是链路编号,IPD=1,6:HELLOA,表示第1条链路收到了6字节数据,程序里根据这个编号分别处理两条服务器逻辑即可。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/697358.html





