繁体   English   中英

关闭套接字服务器 - Python

[英]Shut down a socket server - Python

我一直在尝试在 2 个客户之间创建聊天。 我还需要检查 1 个客户端是否正在断开连接,以便关闭服务器。

我不知道为什么它不起作用,有人可以帮助我吗?

这是我的代码:

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()

它不起作用,因为你在知道你想要它做什么之前已经编写了代码......有点吹毛求疵,但你真的首先用英语(或任何你的第一语言)描述了预期会发生什么。

除此之外, if data == "": recv返回一个字节字符串存在一个真正的错误,因此至少应该是if data == b"":

另一个问题在于s.shutdown(socket.SHUT_RDWR) s不在连接的reciever中(如sender或接收方),但在监听state。 关闭它没有意义,它应该引发错误。

但是干净地关闭服务器并不是那么容易。 主线程正在等待accept s 如果你从另一个线程关闭它,你会得到一个异常,所以你必须在 try 块中保护它。

当两个客户端之间的对话结束时,您应该决定主线程应该发生什么。 目前您正在尝试停止服务器,但是围绕accept调用的while True循环实际上没有任何意义。 在不知道我无法向您推荐固定代码的情况下...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM