5606| 14
|
[问题求助] 【MaixPy】问题反馈 network socket.connect OSError -1[已解决] |
本帖最后由 Sipeed-大佬鼠 于 2021-3-5 09:41 编辑 首先,标题我就不吐槽了,下次提问注意,这个社区不是只有 maixpy ,也不是只有你。 其次你 IP 地址写的是 10.10.27.173 这个 IP 很明显就没有与你的设备获取得到的 192.168.137.26 地址同处一个网络下,那可以说明一个问题。 要么你服务器连不上,要么你IP本来就错了! 建议先了解一下 socket 的知识再来操作网络接口。 |
Sipeed-大佬鼠 发表于 2021-3-5 09:38 大佬鼠,我错了,关于标题下次一定不会了 然后是socket的知识我也是了解学习了一下,但是对于这个问题我还是有一些不懂: 1.首先,我的电脑连接网线,然后K210连接电脑热点,所以此时设备是同一服务器下的吗? 2.其次是socket.connect连接的ip应该是要连接的服务器ip,那么这个ip应该是我的电脑的ip吗?(电脑运行另一个程序,绑定监听'0.0.0.0'),如果不是那么这个ip应该是什么,或者怎么确定呢? |
我朝女王扔石头 发表于 2021-3-5 10:05 1 网络结构应该改成这样,K210 硬件与电脑同处一个局域网网段下(或上级网络,如城域网),如这里的电脑 IP 应该同为 192.168.137.xxxx ,这样的 IP 地址才能被 K210 所连接到,又或者是上级路由,如公网 IP 能够被路由器转发得到。 2. 0.0.0.0 意味着电脑可以接收所有网卡的 IP 地址传来的数据,在 TCP 60000 这个端口下得到数据。 |
关于你这个问题,应该你是不清楚各 IP 网络之间能否被连接的问题。 如果你不清楚,你可以试试 ping 目标 IP 看能否连接。 |
Sipeed-大佬鼠 发表于 2021-3-5 10:14 大佬鼠,我又查找了下关于局域网和socket的资料,我的理解是K210和PC在同一局域网下,然后PC使用socket.bind绑定自己ip为服务器,K210使用socket.connet连接同一局域网下的服务器ip(这里应该就是PC绑定的ip),这样就可以实现二者在局域网下的通信。 然后我晚上回去试了试,发现还是报这个错误,我的尝试如下: 1.手机开热点,然后电脑和K210都连接这个热点2.电脑使用网络调试助手,开启搭建一个服务器 3.K210 connect连接服务器ip,这里为("192.168.43.167",60000) 4.为确认二者是可以通的,我电脑端ping了K210的ip,发现是通的 结果还是报了那个OSError: -1 ,这个问题困扰我很久了,一直解决不掉,望解答,谢谢 |
PC端搭建服务器
K210代码
PC端ping K210
K210连接WiFi后返回信息
我朝女王扔石头 发表于 2021-3-5 19:41 固件库版本: maixpy_v0.6.2_24_g19961cc18_minimum_with_ide_support.bin 代码: from my_device import ESP8285 SSID = "wifi"PASW = "caiqidongdad"wifi = ESP8285()wifi.connect_wlan(SSID,PASW)print('network state:', wifi.isconnected(), wifi.ifconfig()) import socket ADDR = ("192.168.43.167", 60000) sock = socket.socket()sock.connect(ADDR) #其中ESP8285是把仓库那个network_espat.py的封装类 |
本帖最后由 Sipeed-大佬鼠 于 2021-3-5 20:07 编辑 注意, 4.为确认二者是可以通的,我电脑端ping了K210的ip,发现是通的 不代表 K210 和 电脑是相通的,还有电脑的防火墙可能会挡住。 用 AT 命令 ping 一下 电脑端的 IP 看能否联通,然后确认电脑没有防火墙或者是安全软件在工作。 如果你不确定,可用手机上的网络调试客户端去连接电脑,反之同理。 |
Sipeed-大佬鼠 发表于 2021-3-5 20:05 谢佬鼠,真的是防火墙问题,然后对于socket我还有个问题不太明白。。。 就这个socket底层是怎么实现传输数据的,就比如说我的板子是esp82985,那么发送数据应该是靠AT指令发的,那么这个socket是怎么知道我的esp8285是连接那个串口的,难道是靠那个network.ESP8285(uart)产生的实例来发送数据的吗?比如说我不使用network库中函数,就自己创建串口对象连接esp8285,然后串口发送AT指令连接wifi,那么这种情况下,socket是不是就不能实现套接字的发送了 |
我朝女王扔石头 发表于 2021-3-6 10:41 micropython 的 socket 是与 network 接口进行连接的。 具体的实现源码看这里: https://github.com/sipeed/MaixPy ... k/esp8285/esp8285.c 它实际上就是把一个网卡驱动注入到 micropython 的 network 层里,然后再通过初始化指定的 network 类型,这时候 socket 和 network 实际上是分离的,假设有一台电脑有多张网卡,socket 的 IP 只需要能够匹配上这些网卡的地址,就可以被用来收发数据。 AT 指令在网卡驱动这里实际上就是模拟某 Socket 的收发接口,你想要跳过这个接口直接使用 AT 指令也是可以的,只是上层的网络链接的代码不一致罢了。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed