使用套接字不断运行server.accept()是否安全?

时间:2018-10-18 10:04:31

标签: python sockets

现在,我正在使用带有sockets模块的Python在TCP中构建服务器-客户端程序。在整个Internet上浏览后,服务器代码中显然需要conn, addr = server.accept()行,但是服务器无法知道客户端何时连接。服务器运行后可能需要几秒钟到几分钟。

所以我的问题是:我可以使用线程来不断运行server.accept()行代码,以便任何选择连接的客户端都可以吗?还是可能导致恶意连接?

1 个答案:

答案 0 :(得分:1)

根据enter image description here

  

TCP建立连接-三向握手-   准备好后将其覆盖并放入完​​整的连接队列中。   Accept()返回此对象前面的下一个等待连接   队列。

     

从客户的角度来看,它是“连接”的,但不会   与任何人交谈,直到服务器接受并开始处理。分类   就像当您致电公司并立即被搁置时一样   队列。您已“建立联系”,但直到完成任何交易   实际上有人接了电话并开始讲话。

因此,如果您不这样做,则不会“丢失”连接。但是accept()通常无论如何都在无限循环中运行-在主线程中还是在其他线程中-'这是服务器为客户端提供服务的主要工作。

根据Can 'connect' call on socket return successfully without server calling 'accept'?accept()是线程安全的,您可以很好地使其在单独的线程中运行,甚至可以运行Is accept() thread-safe?