ローカル マシンに次の簡単なスクリプトをセットアップしました。
#!/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
私の問題について: 数分後に接続が切断されます。たとえば、このスクリプトを最後に実行したとき、サーバーは停止して次のように報告しました:「これは 0:02:27.517715 続きました」。これは、クライアントが接続を切断する前に約 7 分間データを受信できた時間です。さて、私はこれまであまりネットワーク プログラミングを行っていなかったので、それよりもずっと長く接続されていると期待するのが妥当かどうかはわかりません。アクティブなTCP 接続が存続する期間はどれくらいですか? このような切断はどのくらい一般的ですか?
MSN が 1 時間に 1 回ログアウトしたり、数分後にダウンロードが停止したり、その他の奇妙な動作に問題があったため、自分のローカル ネットワークをテストするためにこれらのテストを実施しました。私の質問は、これを修正する方法ではありませんが、テストの結果が妥当であるか、ネットワークの問題を示している場合のみですか?