在Python中客户端没有响应多线程

2024-06-09 14:49:37 发布

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

我试着做两条线。一个将始终在侦听,另一个将检查服务器是否在侦听

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

在这之后,它什么也没表现出来


Tags: hostserverportdefwithsocketconnlisten
1条回答
网友
1楼 · 发布于 2024-06-09 14:49:37

您正在尝试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() 

相关问题 更多 >