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