开发者

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

开发者 https://www.devze.com 2023-01-23 12:08 出处:网络
I want to connect Blender (v2.55) to a webpage through sockets. For the web part, I can use Node.js & socket.io. I\'ve already used a little node.js/socket.io, it\'s not a problem I think.

I want to connect Blender (v2.55) to a webpage through sockets.

For the web part, I can use Node.js & socket.io. I've already used a little node.js/socket.io, it's not a problem I think.

Now for Blender, it runs on Python 3.1, so I've already sockets and I can add libraries if needed. I'm new to Python sockets, can I 开发者_C百科connect a client to node.js/socket.io directly ?

I tried with the basic code from the Python doc:


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)

It results by:

Sent:     Hello from Blender
Received: b''

It seems that Blender is connected, but doesn't receive data. Also Node shows no new client connected…

Do I need something else ? If somebody can help me out…


You are missing a protocol/handshake. What you have there is a bare TCP socket connection. node.js/socket.io lives on top of a TCP socket. Basically when you open a connection to a socket.io server, it's expecting you to use some protocol for communication (websockets, longpolling, htmlfile, whatever). The initial handshake defines what that protocol will be. Websockets is one of the supported protocols. This blog post should help you. It doesn't look all that hard to get websockets implemented.


you can try the form of loop to receive valid data.

    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()

and use your browser to visit the host and port for a check


I understand this thread is extremely old. But I faced the same problem recently and couldn't find an answer or any similar questions. So here is my answer.

Answer: Use socket.io for python python-socketio

The reason why built-in sockets or any other websocket library in python won't work is explained in the socket.io website socket.io Socketio is simply just not a websoket connection. Although they say, it uses websockets for transport internally, the connection is established with HTTP protocol http:// as opposed to the WEBSOCKET protocol ws://. This results in the failure of handshake and the connection fails to be established.

0

精彩评论

暂无评论...
验证码 换一张
取 消