我有这个代码。它不是整个代码,因为它的Blender插件有许多与套接字无关的行,所以我在这里只给出处理插槽的部分,这个插槽与程序的其余部分隔离开来。
如果您想查看整个代码,可以在此处找到
def create_thread():
global threadSocket,listening
threadSocket = threading.Thread(name='threadSocket', target= socket_listen)
listening = True
create_socket_connection()
threadSocket.start()
def socket_listen():
global receivedSocket,listening, receivedData,socketServer, socketMessages, pherror
socketServer.listen(5)
while listening:
(receivedSocket , adreess) = socketServer.accept()
receivedData = (receivedSocket.recv(1024)).decode("utf-8")[:-2]
socketMessages.append(receivedData)
receivedSocket.sendall('Hello from Blender!\n')
receivedSocket.close()
def create_socket_connection():
global socketServer
socketServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socketServer.bind(('127.0.0.1',4000))
我使用telnet测试telnet 127.0.0.1 4000的套接字,telnet可以发送数据但是从不接收任何数据。正如您所看到的,我的套接字在其自己的线程中阻塞,因此它不会阻止整个程序执行。我假设sendall尝试发送所有内容,由于某种原因,它无法连接回telnet进行发送。我在这里做错了吗?
答案 0 :(得分:1)
以下行会引发错误,因为根据给定的代码没有定义socketMessages
。
socketMessages.append(receivedData)
上述行中的异常将阻止下一行(sendall
)的执行。
要解决此问题,请将socketMessages
定义为列表或删除上述行。
更新:
socket.sendall
接受Python 2.x中的字节字符串(str
,Python 3.x中的bytes
)。在Python 3.x中,您应该使用bytes literal,如下所示。
receivedSocket.sendall(b'Hello from Blender!\n')