1

我在本地机器上设置了这个简单的脚本:

#!/usr/bin/python

import socket
from datetime import datetime

print "Connecting to test server"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("mydomain.com", 9090))

start = datetime.now()

totalbytes = 0

try:
    while True:
        data = s.recv(512)
        totalbytes += len(data)
        print "Got %d bytes of data" % (len(data))
except Exception as e: 
    print "ERROR", e
    pass

end = datetime.now()

print "Lasted for", end - start, "with a total of", totalbytes/1000/1000, "megabytes"

这个脚本在我的本地服务器上(在同一个网络上运行,但请注意我在这里通过外部 IP 地址)

#!/usr/bin/python

import socket
from datetime import datetime

print "Listening for test client"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.2.100", 9090))
s.listen(5)

start = datetime.now()

try:
    while True:
        clientsocket, address = s.accept()

        # Start sending infinite data until I can't
        while True:
            clientsocket.send("*" * 511 + "+")
except:
    pass

end = datetime.now()

print "This lasted", end - start

关于我的问题:几分钟后连接断开。例如,上次运行此脚本时,服务器刚刚停止并报告:“This lasted 0:02:27.517715”,在此之前客户端可以接收数据约 7 分钟,然后断开连接。现在,我在我的日子里没有做过很多网络编程,所以我不知道期望他们保持联系的时间比这更长是否合理?一个活跃的TCP 连接可以存活多久?像这样的断开连接有多常见?

我进行了这些测试是为了测试我自己的本地网络,因为我遇到了 MSN 每小时注销一次、几分钟后停止下载和其他奇怪行为的问题。我的问题不是如何解决这个问题,而是我的测试结果是否合理,或者指出我的网络存在问题?

4

1 回答 1

0

TCP 连接可以保持多年*并传递无限量的数据。当客户端和服务器断开连接时,您从客户端和服务器那里得到什么错误?这将是追查问题的第一步。

[*] 理论上我会无限期地说,但我只是个人观察到“年”。

于 2010-12-27T20:18:43.123 回答