Websockets - 尝试将 Phython Code 转换为 Node



我正在尝试复制此库的功能 https://github.com/rnbguy/pysphere/blob/master/misphere.py 它通过websockets连接到Mi Sphere 360相机。

重要的代码在这里

ms_ip = '192.168.42.1'
ms_tcp_port = 7878
ms_uk_port = 8787
ms_fs_port = 50422
def init(self):
    self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
    self.socket.connect((self.ms_ip, self.ms_tcp_port))
    self.socket_1 = socket.socket()
    self.recv_handle_live = True
    self.recv_thread = threading.Thread(target=self.recv_handler)
    self.recv_thread.daemon = True
    self.session = Session()
    self.session.conf = {}
    self.session.locks = {}
    self.last_send = 0

我正在尝试使用 Node 中的ws库执行此操作

const ip = '192.168.42.1'
const port = '7878'
const url = `ws://${ip}:${port}`
const websocket = new WebSocket(url)

但是我没有连接到相机。 (它通过 Wifi 连接,但 websocket 从不发送连接消息(

我想知道这是否与 Phython 代码中列出的协议有关。

我在 websocket 文档中看到您可以在连接中定义协议,但我找不到任何关于这些协议是什么以及如何添加它们的文档。

self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)

有人知道我如何在节点 websocket 连接中添加这样的东西吗?

webSocket 连接不能与普通 TCP 套接字服务器建立。

普通TCP套接字与webSocket不同。 您的 Python 代码似乎正在建立普通的 TCP 套接字连接。

您的节点.js代码正在尝试建立 webSocket 连接。 webSocket 连接只能与使用 webSocket 协议(在纯 TCP 套接字上运行(的 webSocket 服务器建立

如果你的Python代码正在工作,那么你显然只需要建立一个普通的TCP套接字连接,你可以在Net模块中看到如何做。

有关纯TCP连接和webSocket连接之间差异的进一步说明,请参阅以下内容:

计算机拒绝 Web 套接字连接

WebSocket 和普通套接字通信有什么区别?

有没有办法使用 javascript 与 IP 建立 tcp 连接?

套接字

服务器未与 JavaScript 套接字客户端连接

要连接到常规 TCP 套接字,请使用net包而不是 WebSocket。示例节点等效代码:

const net = require('net');
const port = 7878
const ip = "192.168.42.1"
const socket = net.createConnection(port, ip);
socket.on('connect', () => {
  console.log("socket connected");
});

最新更新