Python套接字 - 如何在客户端保持与服务器的连接活跃

5
我第一次使用Python的socket库,并且对计算机网络方面不是很有经验。我能够连接到服务器,通过wireshark查看,tcp握手已经完成。连接服务器后(我无法控制服务器),连接会保持一段时间,但是不久之后,服务器发送“FIN,ACK”,连接就终止了。我试图理解如何在客户端可以访问服务器的情况下保持此连接处于活动状态。 从TCP连接的角度来看,似乎可以每隔一段时间发送一个数据包,这可能是某种保持存活消息。 我曾经认为在另一个线程中每5秒使用socket.send('hello')将保持与服务器的连接打开,但是过一段时间后我仍然收到"FIN,ACK"。 在文档中,我发现了一个setsockopt(),但使用它并没有明显的区别。 我尝试在建立连接之前和之后都使用了client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),但是我不完全理解这种方法应该如何工作,所以可能我使用不正确。关于这一点几乎没有提及。我在某个地方读到过在Windows上有问题。我不知道事实真相。 我缺少什么?套接字的文档似乎没有任何关于此的内容,除非我可能漏掉了什么。
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()
1个回答

2

谢谢。保持连接的信号已发送,但服务器仍然关闭连接。也许是因为服务器正在等待某些数据,并在没有接收到数据后关闭连接。 - God Usopp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接