Establezca el zócalo en el estado predeterminado sin bloqueo y use la excepción de captura para manejar la anomalía del zócalo debido al no bloqueo para lograr el funcionamiento normal del programa. Los efectos son los siguientes:
1 socket de importación 2 3 4 def main (): 5 tcp_server_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) 6 tcp_server_socket.bind (( '' , 7788 )) 7 tcp_server_socket.listen (128 ) 8 tcp_server_socket.setblocking ( falso) # conjunto no obstruya socket de escucha 9. 10 client_socket_list = list () # proporcionó una lista almacenar socket de cliente 11. al mismo tiempo Verdadero: 12 es la prueba : 13 es Puesto que el software de, client_addr = tcp_server_socket.accept () 14 de la excepción : 15 Paso 16 # impresión ( "no hay nuevas conexiones de cliente") 17. la otra cosa : 18 es de impresión ( " el cliente " ) 19. new_socket.setblocking (Falso) # socket de cliente Conjunto no obstrucción palabra 20 es client_socket_list.append (ya que el software de) 21 es 22 es # lista está vacía no se realiza para el bucle 23 es para client_socket en client_socket_list: 24 la prueba : 25 recv_data = client_socket.recv (1024 ) 26 es la excepción : 27 Paso 28 # impresión ( "no ha recibido los datos del cliente") 29 de la otra : 30 SI recv_data: 31 es de impresión (recv_data.decode ( 'UTF-8 ' )) 32 # cuando hay recv pero no se reciben datos, Demuestre que el cliente cerró la conexión 33 más : 34 client_socket_list.remove (client_socket) 35 client_socket.close () 36 37 38 if __name__ == ' __main__ ' : 39 main ()