关闭套接字服务器-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确实是可能的,但这并没有说明在主线程中如何使用侦听套接字。