Отключение TCP-соединений, это нормально? - PullRequest
1 голос
/ 27 декабря 2010

Я установил этот простой скрипт на моем локальном компьютере:

#!/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 Ответ

0 голосов
/ 27 декабря 2010

TCP-соединение может оставаться в течение многих лет * и передавать неограниченное количество данных. Какие ошибки вы получаете от клиента и сервера, когда они отключены? Это было бы первым шагом к поиску проблемы.

[*] Я бы сказал, что теоретически, но я только лично наблюдал "годы".

...