Наличие кнопки отключения и кнопки подключения? - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть кнопка отключения и кнопка подключения на моем клиенте.Когда я нажимаю кнопку отключения, а затем кнопку подключения, я получаю следующее: OSError: [WinError 10038] An operation was attempted on something that is not a socket

Кнопка отключения кодируется следующим образом:

def Disconnect():
    s.shutdown(socket.SHUT_RDWR)
    s.close()

И подключениевот эта кнопка:

def Join1():
    print("CONNECTING TO: " + host + "...")
    try:
        s.connect((host, port))
        print("CONNECTING TO: " + host + " ESTABLISHED!")

        statusbar_status = "Connected"
        startrecv = Thread(target=returnrecv)
        startrecv.start()

Почему я не могу подключиться снова после нажатия кнопки отключения?Разве невозможно вновь открыть розетку?Я вот уже месяц как застрял на этой проблеме и не могу понять почему ..

1 Ответ

0 голосов
/ 29 декабря 2018

После закрытия сокета вы не сможете использовать его повторно для обмена другими данными между Сервером и Клиентом.Из Python Docs , о методе close ():

Закройте сокет.Все будущие операции с объектом сокета завершатся неудачно.Удаленный конец больше не будет получать данные (после сброса данных в очереди).Сокеты автоматически закрываются при сборке мусора.

Поэтому вам нужно будет создавать новый объект сокета каждый раз, когда вы пытаетесь подключиться (в вашей функции join1(), которая будет выглядеть примерно так:

def Join1():
    global s     # i would recommend using classes instead
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)      # your socket object
    print("CONNECTING TO: " + host + "...")
    try:
        s.connect((host, port))
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...