我正在尝试复制此库https://github.com/rnbguy/pysphere/blob/master/misphere.py的功能,该库通过websocket连接到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)
有人知道我如何在Node websocket连接中添加类似内容吗?
答案 0 :(得分:1)
无法与普通TCP套接字服务器建立webSocket连接。
普通的TCP套接字与webSocket不同。您的Python代码似乎正在建立普通的TCP套接字连接。
您的node.js代码正在尝试建立webSocket连接。只能与使用webSocket协议(在纯TCP套接字之上运行)的webSocket服务器建立webSocket连接。
如果您的Python代码正常工作,那么您显然只需要建立一个简单的TCP套接字连接即可,您可以在Net module中看到如何做。
有关纯TCP连接和webSocket连接之间差异的进一步说明,请参见以下内容:
Computer refuses websocket connections
What's the difference between WebSocket and plain socket communication?
Is there a way to do a tcp connection to an IP with javascript?
答案 1 :(得分:1)
要连接到常规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");
});