我朝女王扔石头 发表于 2021-3-4 19:41:24

【MaixPy】问题反馈 network socket.connect OSError -1[已解决]

本帖最后由 empty 于 2021-3-5 10:18 编辑

在运行例仓中network中的PC机搭建服务器,K210充当客服端连接服务器的例程时

使用socket.connect函数报错

其中PC机搭建服务器正常运行

K210有连接上wifi;

socket.connect参数中的ip我试了PC机ip、nic.ifconfig()返回的两个ip,结果都报错

empty 发表于 2021-3-4 20:36:04

收到正在call技术人员

empty 发表于 2021-3-4 20:41:27

建议先更换完整版固件尝试

Sipeed-大佬鼠 发表于 2021-3-5 09:38:42

本帖最后由 Sipeed-大佬鼠 于 2021-3-5 09:41 编辑

首先,标题我就不吐槽了,下次提问注意,这个社区不是只有 maixpy ,也不是只有你。

其次你 IP 地址写的是 10.10.27.173 这个 IP 很明显就没有与你的设备获取得到的 192.168.137.26 地址同处一个网络下,那可以说明一个问题。
要么你服务器连不上,要么你IP本来就错了!

建议先了解一下 socket 的知识再来操作网络接口。



我朝女王扔石头 发表于 2021-3-5 10:05:41

Sipeed-大佬鼠 发表于 2021-3-5 09:38
首先,标题我就不吐槽了,下次提问注意,这个社区不是只有 maixpy ,也不是只有你。

其次你 IP 地址写的是 ...

大佬鼠,我错了,关于标题下次一定不会了
然后是socket的知识我也是了解学习了一下,但是对于这个问题我还是有一些不懂:
1.首先,我的电脑连接网线,然后K210连接电脑热点,所以此时设备是同一服务器下的吗?
2.其次是socket.connect连接的ip应该是要连接的服务器ip,那么这个ip应该是我的电脑的ip吗?(电脑运行另一个程序,绑定监听'0.0.0.0'),如果不是那么这个ip应该是什么,或者怎么确定呢?

Sipeed-大佬鼠 发表于 2021-3-5 10:12:33

我朝女王扔石头 发表于 2021-3-5 10:05
大佬鼠,我错了,关于标题下次一定不会了
然后是socket的知识我也是了解学习了一下,但是对于这个问题我 ...

1 网络结构应该改成这样,K210 硬件与电脑同处一个局域网网段下(或上级网络,如城域网),如这里的电脑 IP 应该同为 192.168.137.xxxx ,这样的 IP 地址才能被 K210 所连接到,又或者是上级路由,如公网 IP 能够被路由器转发得到。
2. 0.0.0.0 意味着电脑可以接收所有网卡的 IP 地址传来的数据,在 TCP 60000 这个端口下得到数据。

Sipeed-大佬鼠 发表于 2021-3-5 10:14:44

关于你这个问题,应该你是不清楚各 IP 网络之间能否被连接的问题。

如果你不清楚,你可以试试 ping 目标 IP 看能否连接。

我朝女王扔石头 发表于 2021-3-5 19:41:22

Sipeed-大佬鼠 发表于 2021-3-5 10:14
关于你这个问题,应该你是不清楚各 IP 网络之间能否被连接的问题。

如果你不清楚,你可以试试 ping 目标 I ...

大佬鼠,我又查找了下关于局域网和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 ,这个问题困扰我很久了,一直解决不掉,望解答,谢谢

我朝女王扔石头 发表于 2021-3-5 20:01:31

我朝女王扔石头 发表于 2021-3-5 19:41
大佬鼠,我又查找了下关于局域网和socket的资料,我的理解是K210和PC在同一局域网下,然后PC使用socket.b ...

固件库版本:
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:05:06

本帖最后由 Sipeed-大佬鼠 于 2021-3-5 20:07 编辑

注意,
4.为确认二者是可以通的,我电脑端ping了K210的ip,发现是通的
不代表 K210 和 电脑是相通的,还有电脑的防火墙可能会挡住。

用 AT 命令 ping 一下 电脑端的 IP 看能否联通,然后确认电脑没有防火墙或者是安全软件在工作。

如果你不确定,可用手机上的网络调试客户端去连接电脑,反之同理。

我朝女王扔石头 发表于 2021-3-6 10:33:24

终于解决了,发现真的是win10防火墙问题,关了防火墙就没有问题了,反正我是先用串口发AT指令控制esp8285看看能不能连接到服务器上,发现连不上,那么socket也肯定连不上

我朝女王扔石头 发表于 2021-3-6 10:41:12

Sipeed-大佬鼠 发表于 2021-3-5 20:05
注意,
4.为确认二者是可以通的,我电脑端ping了K210的ip,发现是通的
不代表 K210 和 电脑是相通的,还有 ...

谢佬鼠,真的是防火墙问题,然后对于socket我还有个问题不太明白。。。

就这个socket底层是怎么实现传输数据的,就比如说我的板子是esp82985,那么发送数据应该是靠AT指令发的,那么这个socket是怎么知道我的esp8285是连接那个串口的,难道是靠那个network.ESP8285(uart)产生的实例来发送数据的吗?比如说我不使用network库中函数,就自己创建串口对象连接esp8285,然后串口发送AT指令连接wifi,那么这种情况下,socket是不是就不能实现套接字的发送了

Sipeed-大佬鼠 发表于 2021-3-6 13:36:13

我朝女王扔石头 发表于 2021-3-6 10:41
谢佬鼠,真的是防火墙问题,然后对于socket我还有个问题不太明白。。。

就这个socket底层是怎么实现传输 ...

micropython 的 socket 是与 network 接口进行连接的。

具体的实现源码看这里:

https://github.com/sipeed/MaixPy/blob/b5f626d884bdb870c33d7bff41c454c86be5d501/components/micropython/port/src/standard_lib/network/esp8285/esp8285.c

它实际上就是把一个网卡驱动注入到 micropython 的 network 层里,然后再通过初始化指定的 network 类型,这时候 socket 和 network 实际上是分离的,假设有一台电脑有多张网卡,socket 的 IP 只需要能够匹配上这些网卡的地址,就可以被用来收发数据。

AT 指令在网卡驱动这里实际上就是模拟某 Socket 的收发接口,你想要跳过这个接口直接使用 AT 指令也是可以的,只是上层的网络链接的代码不一致罢了。

jyh 发表于 2024-5-7 23:36:07

kflash_gui.exe【maixpy_v0.6.2_85_g23d09fbcc.bin】中的 socket 下,常用的方法都没有的(如 socket.bind(, 8080)。网上关于UDP、Http例全无法运行,去哪里查解决方案?

jyh 发表于 2024-5-7 23:37:42

kflash_gui.exe【maixpy_v0.6.2_85_g23d09fbcc.bin】中的 socket 下,常用的方法都没有的(如 socket.bind(, 8080)。网上关于UDP、Http例全无法运行,去哪里查解决方案?
页: [1]
查看完整版本: 【MaixPy】问题反馈 network socket.connect OSError -1[已解决]