如何将客户端的 Python 套接字连接到 Node.js/socket.io?

How to connect a Python socket on client-side to Node.js/socket.io?

提问人:Julien Guigner 提问时间:11/3/2010 更新时间:3/10/2022 访问量:9880

问:

我想通过套接字将 Blender (v2.55) 连接到网页。

对于 Web 部件,我可以使用 Node.js & socket.io。我已经使用了一个小节点.js/socket.io,我认为这不是问题。

现在对于 Blender,它运行在 Python 3.1 上,所以我已经有套接字,如果需要,我可以添加库。我是 Python 套接字的新手,我可以直接将客户端连接到 node.js/socket.io 吗?

我尝试了 Python 文档中的基本代码:


import socket
import sys

HOST, PORT = "127.0.0.1", 8080
data = "Hello from Blender"

# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connect to server and send data
sock.connect((HOST, PORT))
sock.send(bytes(data + "\n","utf8"))

# Receive data from the server and shut down
received = sock.recv(1024)
sock.close()

print("Sent:     %s" % data)
print("Received: %s" % received)

其结果是:

Sent:     Hello from Blender
Received: b''

Blender似乎已连接,但未接收数据。此外,节点显示没有连接新客户端...

我需要别的东西吗?如果有人能帮我...

Python 套接字节点 .js 混合器

评论

0赞 seriyPS 11/3/2010
您可以使用 telnet 或 netcat (like ) 连接到“127.0.0.1”、8080 并通过 telnet 发送/接收数据吗?你的python脚本看起来不错。telnet 127.0.0.1 8080
0赞 Julien Guigner 11/3/2010
它已连接,但节点端没有通知...我之前在 Python 套接字服务器上使用过这段代码,它运行得很好......
0赞 Julien Guigner 11/3/2010
好的,看来我必须查看 Python 和 Node.js 的 UDP 套接字......

答:

1赞 The Mad Gamer 11/4/2010 #1

您缺少协议/握手。你所拥有的是一个裸露的TCP套接字连接。node.js/socket.io 位于 TCP 套接字之上。基本上,当您打开与 socket.io 服务器的连接时,它希望您使用一些协议进行通信(websockets,longpolling,htmlfile等)。初始握手定义了该协议的内容。Websockets 是支持的协议之一。这篇博文应该对您有所帮助。实现 websockets 看起来并不难。

评论

0赞 The Mad Gamer 11/4/2010
现在似乎还有一个 Python Websocket 客户端库。我没有用过它 - github.com/mtah/python-websocket
0赞 Julien Guigner 11/5/2010
我正在尝试python-websocket,但我还有另一个问题,我在这里发布了它:stackoverflow.com/questions/4101621/...
0赞 Octaviotastico 9/3/2021
看来博客已经关闭了:(
0赞 Ace_of_King 9/27/2021 #2

您可以尝试 loop 的形式来接收有效数据。

    import socket
    host="127.0.0.1"
    port=8088
    web=socket.socket()
    web.bind((host,port))
    web.listen(5)
    print("recycle")
    while True:
        conn,addr=web.accept()
        data=conn.recv(8)
        print(data)
        conn.sendall(b'HTTP/1.1 200 OK\r\n\r\nHello world')
        conn.close()

并使用您的浏览器访问主机和端口进行检查

0赞 Ram Kumar 3/10/2022 #3

我知道这个线程非常古老。但是我最近遇到了同样的问题,找不到答案或任何类似的问题。所以这是我的答案。

答:将 socket.io 用于 python python-socketio

socket.io 网站解释了 python 中内置套接字或任何其他 websocket 库不起作用的原因 socket.io Socketio 根本不是 websoket 连接。虽然他们说,它在内部使用 websockets 进行传输,但连接是使用 HTTP 协议建立的,而不是 WEBSOCKET 协议 .这会导致握手失败,并且无法建立连接。http://ws://