Skip to main content
 首页 » 编程设计

python之客户端没有响应之Python 中的多线程

2024年08月12日36kerrycode

我正在尝试创建 2 个线程。一个将始终在监听,第二个将检查服务器是否在监听。

Host='127.0.0.1' 
Port= 5555 
threads=[] 
threads2=[] 
 
def server() : 
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 
        s.bind((Host, Port))  
        while 1: 
            print("listen() ")  
            s.listen()  
            conn, address= s. accept()  
            with conn: 
                print(" Connected by", address)  
                while True: 
 
                   data=conn.recv(1024)  
                   print("from caller", representing(data))  
 
 
def client () : 
    s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    try: 
        s.bind(('127.0.0.1', 5555))  
    except socket.error as e: 
        if e.errno==errno.EADDRINUSE: 
            print("port in use")  
        else: 
            print("connected")   
    s.close()  
 
 
 
served = threading.Thread(target=server)  
threads.append(served)  
served.start()  
print("started the server thread")  
time.sleep(2)  
click =threading.Thread(target=client)  
threads2.append(click)  
click.start()  
print("click started")  

我得到以下输出

started the server thread 
listen()  
click started 

在此之后它没有显示任何内容。

请您参考如下方法:

您正在尝试在服务器和客户端中绑定(bind) 套接字。您只能绑定(bind) 一次。 (参见 Python documentation on this。

相反,对于客户端,您应该使用connect:

def client () : 
    s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    try: 
        # use s.connect instead of s.bind 
        s.connect(('127.0.0.1', 5555))  
    except socket.error as e: 
        if e.errno==errno.EADDRINUSE: 
            print("port in use")  
        else: 
            print("connected")   
    s.close()