我在本地机器上设置了这个简单的脚本:
#!/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 每小时注销一次、几分钟后停止下载和其他奇怪行为的问题。我的问题不是如何解决这个问题,而是我的测试结果是否合理,或者指出我的网络存在问题?