关闭套接字服务器-Python
我一直在尝试在两个客户端之间创建聊天。 我还需要检查是否有一个客户端正在断开连接,以便服务器将关闭 我不知道为什么它不起作用,有人能帮我吗 这是我的代码:关闭套接字服务器-Python,python,sockets,Python,Sockets,我一直在尝试在两个客户端之间创建聊天。 我还需要检查是否有一个客户端正在断开连接,以便服务器将关闭 我不知道为什么它不起作用,有人能帮我吗 这是我的代码: from threading import Thread import socket s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(("localhost", 1234)) s.listen(5) def handleclient(sender,re
from threading import Thread
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(("localhost", 1234))
s.listen(5)
def handleclient(sender,reciever):
while True:
data = sender.recv(1024)
if data == "":
close()
else:
reciever.send(data)
def close():
s.shutdown(socket.SHUT_RDWR)
s.close()
print ("closed")
while True:
(client_s, client_addr) = s.accept()
(client_s1, client_addr1) = s.accept()
t = Thread(target=handleclient, args=(client_s,client_s1))
t1 = Thread(target=handleclient, args=(client_s1,client_s))
t.start()
t1.start()
它不起作用,因为您在知道希望它做什么之前已经编写了代码。。。有点吹毛求疵,但你确实是第一个用英语(或不管你的母语是什么)描述预期会发生什么的人 除此之外,
如果data==”:
recv
返回一个字节字符串,那么它至少应该是如果data==b”“:
另一个问题在于s.shutdown(socket.shuth\RDWR)
s
未处于连接状态(如sender
或receiver
处于侦听状态)。关闭它是没有意义的,它会引发一个错误
但是干净地关闭服务器并不是那么容易。主线程正在等待s
上的accept
。如果您从另一个线程关闭它,您将得到一个异常,因此您必须在try块中保护它
当两个客户端之间的对话结束时,您应该决定主线程应该发生什么。当前您正试图停止服务器,但是
while True
循环accept
调用实际上没有意义。在不知道我无法向您推荐固定代码的情况下…是否回答了您的问题?您没有将任何内容发送到sender
,但这是while循环中的第一条语句。您是否阅读了Python文档中的?如果未发送任何内容,是否sender.recv(1024)
阻止。。。停止tracls中的while循环?@wwii:它只在子线程中停止。在子线程中实现a确实是可能的,但这并没有说明在主线程中如何使用侦听套接字。