我正在尝试创建 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()
