用手机卡上网的单片机, GPRS 模块怎么 socket 编程和服务器全双工通信。

2017-07-13 23:46:59 +08:00
 a49666

一个大学生比赛,楼主和工程学院的合作,他对网络不太懂,我对单片机不太懂。现在需求是这样的,我租了个阿里云的服务器,希望他可以和我全双工的通信。 但是用手机卡上网的在过通讯商的时候用 PAT 协议, 端口号和 ip 地址都不固定。 现在设想他定期向我发汇报,我记下它电信的 IP 地址和端口号,之后我就可以主动给他发消息了。 但是不知道具体怎么操作。。 好像很有难度的样子

2880 次点击
所在节点    问与答
10 条回复
guoyijun163
2017-07-14 00:31:39 +08:00
数据量不大的话不如做轮询简单些……不然就只有类似于 TCP 这样的长链接了
wohenyingyu02
2017-07-14 00:32:59 +08:00
别的不懂,就说现在的手机网络基本上都不是外网 IP,而且 NAT 的 Mapping 和 filtering 行为都是最严格的 Address port dependent,想穿透过去服务端必须用同一个外网 IP 端口接收和发送,客户端不管 IP 是否变化,汇报的频率至少一秒一次刷新 mapping 缓存……都是在 4G 下测的,不知 GPRS 是否一样,我是学文科的,只理解 IP 层以上的网络😬
jigloo
2017-07-14 00:33:11 +08:00
mqtt
wohenyingyu02
2017-07-14 00:33:52 +08:00
@wohenyingyu02 以上说的是 UDP
feather12315
2017-07-14 00:35:16 +08:00
VPN 不就是解决这问题的嘛。
还用想啥
billlee
2017-07-14 01:51:17 +08:00
不太可能实现,单片机上是实现不了 TCP/IP 协议栈的。这种模块一般都是自己实现了协议栈,然后通过 UART 接受 AT 指令给单片机调用,能做的就是那几条指令暴露出来的事情。要完整的 TCP/IP 得上 ARM.
lty1993
2017-07-14 04:11:07 +08:00
找些提供 lwIP 兼容层的 SPI 的 WiFi 芯片。
234235
2017-07-14 09:06:21 +08:00
不知道你的数据量多大,需要全双工通信。
定期向你汇报,这个就是心跳包啊。
通信并不难,电脑现在不也是在局域网内吗?暴露出去的也并不是本机的 IP 和端口号。需要长连接就用 TCP,服务器开一个 TCP 端口,设备连接进来,剩下的,和 PC 到 PC 的 socket 通信好像并无差别。心跳包一般 15/30 秒 一条,如果设备不移动且信号较好的话,IP 和端口的改变频率并不高。设备端做好断开重连和数据重发就好。
UDP 的话就需要你实时回复,IP 不一定会变,但每次 UDP 的端口号都是很大几率改变的。
另外,如果你们准备采用 UART 接口模块,数据量不可能做的很大。需要替换为 USB 或者 SPI 接口的。不过这样会提高成本和对方的编程难度。
mkeith
2017-07-14 11:04:21 +08:00
没事 PAT 协议??

我们 GPRS 是可以连接 Socket 的,而且持续时间长的能持续几天的.
xieyudi1990
2017-07-16 10:46:17 +08:00
@billlee 6 年前在单片机上实现过 http 服务器的就看看。还让同学的手机连过。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/375200

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX