NodeJS micropython客户端从raspberry pi皮科无法连接到本地主机

bis0qfac  于 2023-01-12  发布在  Node.js
关注(0)|答案(1)|浏览(461)

我有一个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

如果有人能指导我潜在的解决方案,那将是非常有帮助的。谢谢!

xu3bshqb

xu3bshqb1#

python socket库用于在端口80上与127.0.0.1建立较低级别的TCP连接。
HTTPWebSockets是原始套接字之上的层,并且需要理解每个协议的特定客户端或套接字代码。
Socket.io是在这些层之上的另一层,它提供了一种通过HTTP或WS协商连接以及后续消息格式化的方法。

普通插座

简单的节点套接字服务器如下所示:

const net = require('node:net')
const server = net.createServer(function(socket) {
    socket.write('Echo server\r\n')
    socket.pipe(socket)
})
server.listen(1111, '127.0.0.1')

您连接的对象:

c.connect(('127.0.0.1',1111))

HTTP
HTTP可能是最简单的途径。我认为urequests大多数时候都是捆绑的,或者将HTTP请求写入原始socket并不难实现。如果你要传输大量数据,使用HTTP与sockets/web sockets相比会有一些开销。

网络套接字

在python端,你需要一个像micropython-uasyncio-websockets这样的客户端(不确定这是否有用,只是搜索了一下),这需要一个像ws library这样的服务器在节点服务器端提供。
Socket.io
可能很难找到一个最新的socket.io库,它可以和micropython一起工作。

相关问题