我有一个node.js服务器,我试图在其中通过套接字从我的raspberry pi皮科w真实的发送数据。
“我的简单服务器”设置如下:
const express = require("express")
const app = express();
const http = require("http");
const { Server } = require("socket.io");
const cors = require("cors")
const server = http.createServer(app)
const io = new Server(server, {
cors: {
origin: "*",
}
})
io.on("connection", (socket) => {
console.log('User Connected: ${socket.id}');
})
app.get('/', function(req, res, next) {
res.send("Hello world");
});
server.listen(80, () => {
console.log("Server is running")
})
我在Raspberry Pi皮科W的客户端运行的代码如下所示:
import time
import socket
import network
ssid = '<name>'
password = '<password>'
# Just making our internet connection
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# Wait for connect or fail
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
time.sleep(1)
# Handle connection error
if wlan.status() != 3:
raise RuntimeError('network connection failed')
else:
print('connected')
status = wlan.ifconfig()
print(wlan.ifconfig())
c = socket.socket()
c.connect(('http://127.0.0.1/',80))
print('Connected')
在确保服务器工作正常后(我设置了一个react客户端并能够传输信息),我仍然不确定为什么我的微控制器上基于micropython的客户端无法设置套接字。
Traceback (most recent call last):
File "<stdin>", line 32, in <module>
OSError: [Errno 103] ECONNABORTED
如果有人能指导我潜在的解决方案,那将是非常有帮助的。谢谢!
1条答案
按热度按时间xu3bshqb1#
python
socket
库用于在端口80
上与127.0.0.1
建立较低级别的TCP连接。HTTP和WebSockets是原始套接字之上的层,并且需要理解每个协议的特定客户端或套接字代码。
Socket.io是在这些层之上的另一层,它提供了一种通过HTTP或WS协商连接以及后续消息格式化的方法。
普通插座
简单的节点套接字服务器如下所示:
您连接的对象:
HTTP
HTTP可能是最简单的途径。我认为
urequests
大多数时候都是捆绑的,或者将HTTP请求写入原始socket
并不难实现。如果你要传输大量数据,使用HTTP与sockets/web sockets相比会有一些开销。网络套接字
在python端,你需要一个像micropython-uasyncio-websockets这样的客户端(不确定这是否有用,只是搜索了一下),这需要一个像
ws
library这样的服务器在节点服务器端提供。Socket.io
可能很难找到一个最新的socket.io库,它可以和micropython一起工作。