2014-12-07 66 views
1

我在Google和这个网站上做了大量的研究,对这个简单的主题有一个答案。我想要一个在python和其他客户端的TCP服务器之间的独家连接。第一个客户端连接到服务器,如果其他客户端尝试在服务器上连接,则必须拒绝它们。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)应该关闭其他客户端的连接。在生活中,第二个客户没有拒绝连接。 如果需要更多信息,我可以提供。

+2

如果您想拒绝连接,您必须在第一个客户端连接后关闭服务器套接字。 – Daniel 2014-12-07 18:46:46

+0

非常感谢。这是一个好方法。此外,我在while循环中包含了套接字的创建和绑定,因为它似乎无法重新打开一个封闭的套接字。 – LyonL 2014-12-08 18:33:57

回答

1

如果您想拒绝连接,您必须在第一个客户端连接后关闭服务器套接字。 - Daniel