Корректный способ закрыть сокет и ObjectOutputStream?

1113 Прежде всего взгляните на этот ответ, читая файл построчно. Как читать большой файл построчно в Python

Правильный, полностью Pythonic способ чтения файла заключается в следующем:

with open(...) as f:
    for line in f:
        # Do something with 'line'

Из моего Понимание того, что вы пытаетесь сделать, это проверить, есть ли имя пользователя, введенное пользователем, в списке и затем #Do something.

Первая проблема заключается в том, что usernab не получает никакого значения из usernab = print(line.strip()), поскольку print() ничего не возвращает. Вместо этого вам следует присвоить usernab строку и затем напечатать ее:

usernab = line.strip()
print(usernab)

Вторая проблема заключается в том, что вы пытаетесь использовать x witch - строку для итерации в диапазоне целых чисел. Вы в основном говорите: «Для каждой строки в диапазоне от 0 до 5, сделайте что-нибудь». Вы должны использовать другую переменную.

Кроме того, if (x) in (usernab) проверит, содержит ли usernab x. В зависимости от того, что вы хотите сделать, вы можете изменить это.

Этот код компилируется под Python 3.7. Он добавит 1 к i пять раз, каждый раз, когда x находится в строке.

f = open("users.txt", "r")

x = str(input("Please enter a valid username: "))

i=0

for line in f:

     usernab = line.strip()
     print(usernab)

     if (x) in (usernab):
            for j in range(0,5):
                i+=1

print(i)

8
задан Lii 19 April 2017 в 07:18
поделиться

2 ответа

Необходимо отправить слушателя (или клиент или сервер, он не имеет значения), некоторый сигнал прекратить прислушиваться к большему количеству данных. Вот очень простой пример:

ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(sock.getInputStream()));

while (true) {
    Object obj = ois.readObject();

    if (obj instanceof String) {
        if ((String)obj).equalsIgnoreCase("quit")) {
            break;
        }
    }

    // handle object
}

ois.close();
sock.close();
9
ответ дан 5 December 2019 в 17:41
поделиться

Вы не должны, вероятно, ожидать для чтения () из сокета, в то время как другой конец закрывает его. В хорошем сетевом протоколе клиент может сообщить серверу, что он не имеет ничего больше для записи (возможно, путем отправки ему специального близкого символа) прежде, чем закрыть соединение.

2
ответ дан 5 December 2019 в 17:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: