socket sendall()不发送数据

时间:2014-07-26 09:18:01

标签: python sockets python-3.x

我有这个代码。它不是整个代码,因为它的Blender插件有许多与套接字无关的行,所以我在这里只给出处理插槽的部分,这个插槽与程序的其余部分隔离开来。

如果您想查看整个代码,可以在此处找到

http://pastebin.com/iqN7tr8E

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进行发送。我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

以下行会引发错误,因为根据给定的代码没有定义socketMessages

socketMessages.append(receivedData)
上述行中的

异常将阻止下一行(sendall)的执行。

要解决此问题,请将socketMessages定义为列表或删除上述行。


看到OP的评论后,

更新

socket.sendall接受Python 2.x中的字节字符串(str,Python 3.x中的bytes)。在Python 3.x中,您应该使用bytes literal,如下所示。

receivedSocket.sendall(b'Hello from Blender!\n')