天线|RF射频
直播中

郑盼

7年用户 212经验值
私信 关注
[问答]

为什么stm32与手机端基于tcp协议经外网网络通信不上?

   我想做的功能是STM32手机端进行网络通信,是经由外网的远程通信而不是使用esp8266的热点模式;
下列是我做过的一系列实验:
一、手机与STM32通信
1、如上,我使用esp8266模块进行通信,8266开启的是STA模式,连上的是我朋友的无线路由器,在路由器上有设置好端口映射(这个是我上网看到说要这样做的,我也不太清楚这样做的原因);    手机端直接用2g数据网络(也试过链接我自己的无线路由器),用的app是原子给的TCP测试工具;
stm32上设置的是TCP server,手机端用的TCP client,输入esp8266的ip地址(这个ip是上所连路由器的设置界面查的),端口统一8086,   连接一直不成功。。。。udp也一样
2、esp8266连上朋友的无线路由器,我的手机也连上同一个无线路由,试了下,成功连接并可以通信,tcp udp都行;
    esp8266使用AP模式,手机直接连,毫无疑问的可以通信,tcp udp都行
二、电脑与esp8266通信
1、电脑端用的网络调试助手(电脑防火墙有关闭),电脑接的我自己的网口;8266连上朋友的无线路由器,使用TCP协议 ;电脑做server,8266做client,连接失败;电脑做client,8266做server连接失败;
2、同上,电脑与esp8266,使用udp协议,esp8266输入电脑ip,连接成功!? !!!
那个8266跟手机连同一个路由器或者直接相连可以成功通信很好理解;连上同一个路由器,路由器给分配不同的ip,相当于局域网通信(这个理解没错吧,这学期正在学计算机网络);
最后一个实验,电脑与8266连不同的网口(实际上8266连的是我朋友的wifi)使用udp,通信成功,这是经由外网进行了通信吧!那怎么TCP就不行了呢,
我在猜想是不是跟ip地址有关,使用udp,8266输入PC的ip,就连接成功了,而此时我看网络调试助手下方显示的连接方的ip地址跟stm32的显示屏上显示的8266的ip不一致?!!
网络调试助手显示的ip是8266的正确ip吗?而显示屏上面8266的ip是不对的?但是我去查了8266连的我朋友的无线路由,是跟显示屏一样的没错啊,这个是无线路由给8266分配的ip;还是说这个是无线路由给8266分配的局域网的ip而已,并不是在网络上的真正ip?
总结如下:1、我想问懂的高手们最后那个电脑与8266网络通信,调试助手上显示的才是8266正确的网络上用的ip地址吗?那我查到的路由器上面分配的ip是无线路由分配的局域网ip?相关概念好糊涂,能点拨一下吗
               2、如果不是ip的问题,那是为什么我进行tcp通信就不行了呢,是其他的pc上的网络设置没有设置好?还是别的?

回帖(2)

江璐

2019-10-25 08:58:12
我想先把pc与stm32的通信做成功先,手机端的是一次也没成功过网络通信
举报

王林

2019-10-25 09:04:56
挂在同一个路由器下面的经由路由器DHCP的客户端,对外接口(就是外网IP)都是路由器通过PPPOE拨号(或者静态外网IP)获得的,而客户端自己的IP只是一个局域网IP,相当于是二级IP,你连在一个路由器下面获得的内网IP都是同一个网段的,之间的通信要看路由器支不支持硬件转发,支持的话,就是局域网通信,不支持的话,还是要通过外网连接一遍才能通信.
如果想手机连接连在路由器上的客户端,必须要对客户端做端口映射,把内网IP+端口映射成外网IP+端口,访问的时候是访问外网IP+端口,而不是内网IP+端口
举报

更多回帖

发帖
×
20
完善资料,
赚取积分