一、形貌:
通过blender的脚本,接收socket哀求,将socket哀求的语句,形貌成blender的建模语句,通过exec()函数实行。
二、问题:
运行脚本后,blender界面无法操作。
比如步伐中每隔1S添加一个不同位置的棱角球。但是在现实运行过程中,一个小球都没有表现出来。当我想通过blender界面检察时,直接卡死在运行脚本前的界面。
办理方法其实也很简单,就是将脚本单开一个线程。
- thread = threading.Thread(target=create_server)
- thread.start()
复制代码 三、终极代码:
- import bpy
- import socket
- import math
- import threading
- def create_server(host="127.0.0.1", port=55567):
- # 创建一个 socket 对象
- # AF_INET 表示使用 IPv4 地址
- # SOCK_STREAM 表示使用 TCP 协议
- server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-
- # 绑定到指定的地址和端口
- server_socket.bind((host, port))
-
- # 开始监听客户端的连接请求
- # 参数 5 表示最大连接数(队列长度)
- server_socket.listen(1)
- print(f"Server is listening on {host}:{port}...")
- try:
- while True:
- # 等待客户端连接
- client_socket, client_address = server_socket.accept()
- print(f"Connection from {client_address}")
- client_socket.sendall(b"Hello from server!")
- client_socket.setblocking(False)
- while True:
- try:
- # 接收客户端发送的数据
- data = client_socket.recv(1024) # 每次接收最多 1024 字节
- if data:
- str = data.decode('utf-8')
- print(f"Received from client: {str}")
- # 向客户端发送响应
- exec(str)
-
- else:
- print("No data received from client.")
- break
- except BlockingIOError:
- #print("BlockingIOError")
- i = 0
-
-
- # 关闭客户端连接
- client_socket.close()
- print(f"Connection with {client_address} closed.")
- except KeyboardInterrupt:
- print("Server is shutting down.")
- finally:
- # 关闭服务器 socket
- server_socket.close()
- print("Server socket closed.")
- if __name__ == "__main__":
- thread = threading.Thread(target=create_server)
- thread.start()
- #create_server()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |