套接字sendall()不发送数据

2024-09-28 01:28:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

如果你想看到整个代码,可以在这里找到

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进行发送。我是不是做错了什么?在


Tags: 代码程序defcreatesocketconnectiongloballisten
1条回答
网友
1楼 · 发布于 2024-09-28 01:28:09

下一行将引发错误,因为没有根据给定代码定义socketMessages。在

socketMessages.append(receivedData)

上述行中的异常将阻止执行下一行(sendall)。在

要解决这个问题,请将socketMessages定义为一个列表或删除上面的行。在


看到OP的评论后更新

^{}接受字节字符串(python2.x中的str,python3.x中的bytes)。在Python3.x中,应该使用如下所示的bytes literal。在

^{pr2}$

相关问题 更多 >

    热门问题