Python les Sockets en Gardant une connexion à un serveur en vie du client

Je suis actuellement en train de travailler avec python bibliothèque de socket pour la première fois et je ne suis pas très expérimenté avec les réseaux informatiques.

Je suis en mesure de vous connecter au serveur et la connexion tcp s'est passé tel que vu par wireshark. Après l'établissement d'une connexion au serveur(je n'ai pas de contrôle sur le serveur), la connexion reste ouverte pendant un certain temps, mais après un petit laps de temps, le serveur envoie une "FIN, ACK" et la fin de la connexion. J'essaie de comprendre comment je peux garder cette connexion en vie, tandis que le client est capable d'atteindre le serveur.

En regardant une connexion tcp, il semble un paquet peut être envoyé chaque tellement souvent. Peut-être une sorte de la garder vivante message. J'avais pensé à l'aide de socket.send('hello') toutes les 5 secondes dans un autre thread serait de garder la connexion avec le serveur à l'ouvrir, mais j'ai toujours le "FIN, ACK" après un certain temps.

Dans la documentation, j'ai trouvé un setsockopt() mais à l'aide de ce fait pas de différence notable. J'ai essayé client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) à la fois avant et après la connexion est établie. Je ne comprends pas complètement la façon dont cette méthode est censée fonctionner, donc peut-être que je l'ai utilisé de manière incorrecte. Il n'y a pas mention de cela. J'ai lu quelque part qu'elle était cassée sur windows. Je ne sais pas la vérité.

Ce qui me manque? La documentation pour les sockets ne semble pas avoir quelque chose à ce sujet, à moins que j'ai peut-être raté quelque chose.

import socket
import time
import threading

SERVER_IP = 'THE SERVER'
SERVER_PORT = SERVER_PORT

SOURCE_IP = socket.gethostname()
SOURCE_PORT = 57004

KEEP_ALIVE_INTERVAL = 5

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

def keep_alive(interval):
    data = 'hello'
    while True:
        client.send(data)
        time.sleep(interval)

client.connect((SERVER_IP, SERVER_PORT))

t = threading.Thread(target=keep_alive, args = (KEEP_ALIVE_INTERVAL,))
t.start()

while True:
    data = client.recv(1024)
    if not data:
        break
    print data
client.close()

OriginalL'auteur God Usopp | 2016-08-12