gpt4 book ai didi

Python 套接字 - 从客户端保持与服务器的连接

转载 作者:可可西里 更新时间:2023-11-01 02:33:05 24 4
gpt4 key购买 nike

我目前是第一次使用 python 的套接字库,我对计算机网络不是很有经验。

我能够连接到服务器,并且如 wireshark 所见,tcp 握手已经发生。建立与服务器的连接后(我无法控制服务器),连接会保持打开状态一段时间,但在一小段时间后,服务器发送“FIN,ACK”并终止连接。我正在尝试了解如何在客户端能够访问服务器时保持此连接有效。

看一个tcp连接,似乎每隔一段时间就可以发送一个数据包。也许是一种保持活力的信息。我原以为在另一个线程中每 5 秒使用一次 socket.send('hello') 会保持与服务器的连接打开,但一段时间后我仍然收到“FIN,ACK”。

在文档中我发现了一个 setsockopt() 但使用它没有明显的区别。在建立连接之前和之后,我都尝试过 client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)。我不完全理解这种方法应该如何工作,所以可能我使用不当。这个就不多说了。我在某处读到它在 window 上被打破了。我不知道那是真的。

我错过了什么?除非我可能遗漏了什么,否则套接字的文档似乎没有任何相关内容。

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()

最佳答案

关于启用 keep alive 在 How to change tcp keepalive timer using python script? 有一个重复的问题

请记住,一些服务器和中间代理会强行关闭长期连接,无论是否使用 keep alives,在这种情况下,无论如何您都会在 X 时间后看到 FIN,ACK。

关于Python 套接字 - 从客户端保持与服务器的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38921219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com