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

私の問題について: 数分後に接続が切断されます。たとえば、このスクリプトを最後に実行したとき、サーバーは停止して次のように報告しました:「これは 0:02:27.517715 続きました」。これは、クライアントが接続を切断する前に約 7 分間データを受信できた時間です。さて、私はこれまであまりネットワーク プログラミングを行っていなかったので、それよりもずっと長く接続されていると期待するのが妥当かどうかはわかりません。アクティブなTCP 接続が存続する期間はどれくらいですか? このような切断はどのくらい一般的ですか?

MSN が 1 時間に 1 回ログアウトしたり、数分後にダウンロードが停止したり、その他の奇妙な動作に問題があったため、自分のローカル ネットワークをテストするためにこれらのテストを実施しました。私の質問は、これを修正する方法ではありませんが、テストの結果が妥当であるか、ネットワークの問題を示している場合のみですか?

4

1 に答える 1

0

TCP 接続は何年にもわたって稼働し続け*、無制限の量のデータを渡すことができます。クライアントとサーバーが切断されたときに、クライアントとサーバーからどのようなエラーが発生しますか? これは、問題を追跡するための最初のステップです。

[*] 理論的には無期限と言えますが、個人的に観察したのは「年」だけです。

于 2010-12-27T20:18:43.123 に答える