现在,我正在使用带有sockets模块的Python在TCP中构建服务器-客户端程序。在整个Internet上浏览后,服务器代码中显然需要conn, addr = server.accept()
行,但是服务器无法知道客户端何时连接。服务器运行后可能需要几秒钟到几分钟。
所以我的问题是:我可以使用线程来不断运行server.accept()
行代码,以便任何选择连接的客户端都可以吗?还是可能导致恶意连接?
答案 0 :(得分:1)
TCP建立连接-三向握手- 准备好后将其覆盖并放入完整的连接队列中。 Accept()返回此对象前面的下一个等待连接 队列。
从客户的角度来看,它是“连接”的,但不会 与任何人交谈,直到服务器接受并开始处理。分类 就像当您致电公司并立即被搁置时一样 队列。您已“建立联系”,但直到完成任何交易 实际上有人接了电话并开始讲话。
因此,如果您不这样做,则不会“丢失”连接。但是accept()
通常无论如何都在无限循环中运行-在主线程中还是在其他线程中-'这是服务器为客户端提供服务的主要工作。
根据Can 'connect' call on socket return successfully without server calling 'accept'?,accept()
是线程安全的,您可以很好地使其在单独的线程中运行,甚至可以运行Is accept() thread-safe?。