【发布时间】:2014-12-07 18:34:16
【问题描述】:
我对 Google 和这个网站进行了大量研究,以便为这个简单的话题找到答案。我想要 python 中的 TCP 服务器和其他客户端之间的独占连接。第一个客户端连接到服务器,如果其他客户端尝试在服务器上连接,它们必须被拒绝。
我只能管理服务端代码,协议和客户端不可编辑。
# 1) Socket creation
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2) binding
try:
mySocket.bind((HOST, PORT))
except socket.error:
print "socket connection failed"
sys.exit()
while 1:
# 3) Waiting for a client
print "Ready, waiting for connection"
try :
mySocket.listen(0)
except socket.error:
print "connection lost"
sys.exit()
# 4) Accept connection
connexion, adresse = mySocket.accept()
print "Client connecté, adresse IP %s, port %s" % (adresse[0], adresse[1])
while 1:
# infinite loop while the client is connected. Therorically for ever
try :
msgClient = connexion.recv(1024)
except socket.error:
# connection lost
break;
# protection against empty packet
if len(msgClient) == 0 :
break;
#[Here is my code to process incoming packets]
bla bla bla
print "Connection lost"
当我阅读套接字手册时,调用函数listen(0) 应该关闭其他客户端的连接。在生活中,第二个客户端没有拒绝连接。 如果需要更多信息,我可以提供。
【问题讨论】:
-
如果要拒绝连接,则必须在第一个客户端连接后关闭服务器套接字。
-
非常感谢。这是个好办法。此外,我在 while 循环中包含了套接字创建和绑定,因为似乎无法重新打开已关闭的套接字。