python多线程和套接字连接问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python多线程和套接字连接问题相关的知识,希望对你有一定的参考价值。

我最近选择了python,我正在尝试更多地了解网络。我遇到了一个问题,我试图使用多线程同时监听和发送数据。这是代码:

import socket
from threading import Thread


name = ""


s = socket.socket()

def Main():
    print("What is your name?")
    name = input("Name: ")
    Connect()

def Connect():
    host = '127.0.0.1'
    port = 5000


    s.connect((host, port))
    Thread(target=Send()).start()
    print("oh")
    Listen()


def Listen():
    while True:
        data, addr = s.recvfrom(1024)
        data = data.decode('utf-8')
        if not data:
            break
        print(data)

def Send():
    message = input(name + ": ")
    while message != 'q':
        s.send(message.encode("utf-8"))
        message = input(name + ": ")
    s.close()
Main()

问题是当创建Thread时,程序停留在Send()函数的while循环中,并且它从不调用Listen()函数。我添加了一个print()函数来调试是否在创建线程后发生任何事情。

这是我得到的输出:

你叫什么名字?

名称:FloweR

:测试

:

答案

您正在调用Send()函数而不是将其作为参数传递,这就是它阻塞的原因。

()之后放下target=Send()

Thread(target=Send).start()

以上是关于python多线程和套接字连接问题的主要内容,如果未能解决你的问题,请参考以下文章

python多线程

如何在 Python 中使用套接字处理多线程?

Python网络编程通过ThreadingMixIn实现多线程异步套接字程序

多线程套接字连接挂起 c#。套接字超时/挂起

套接字:客户端读取消息时多线程不起作用

2017.07.16 Python网络编程之在套接字服务器中使用ThreadingMixIn