Сокеты Python [WinError 10038] Попытка операции над чем-то, что не является сокетом

Это не дубликат.

Я искал буквально часы, чтобы найти ответ, и мне не повезло, поэтому я спрашиваю здесь.

В настоящее время я создаю сервер чата, используя модуль сокета python. Когда я запускаю сервер, после того, как клиент подключается и сервер говорит об этом, я получаю исключение:

[WinError 10038] An operation was attempted on something that is not a socket

Я построил радикально уменьшенный сервер, и он работает там, где этот сервер не работает. Это смутило меня, так как он делает одно и то же почти строку за строкой.

tcpServer.py

tcpClient.py

Упрощенный:

testServer.py

testClient.py


person Joe Evans    schedule 03.07.2018    source источник
comment
Вы должны включить код в свой вопрос, а также указать, где именно возникла проблема. См. Как задать вопрос.   -  person Gil Hamilton    schedule 03.07.2018
comment
При этом... Что не так с этой последовательностью? clientSocket.recv, clientSocket.shutdown, clientSocket.close, clientSocket.recv Возможно, shutdown и close имеют неправильный отступ?   -  person Gil Hamilton    schedule 03.07.2018
comment
Вот обновленный код: pastebin.com/QvC62Faq   -  person Joe Evans    schedule 03.07.2018
comment
Похоже, я скопировал часть кода. Вероятно, пока я пытался отладить это.   -  person Joe Evans    schedule 03.07.2018
comment
И еще раз: pastebin.com/KiDVX9ey   -  person Joe Evans    schedule 03.07.2018
comment
У меня плохо получается: pastebin.com/wZRbrY1W   -  person Joe Evans    schedule 03.07.2018


Ответы (1)


позвольте мне прояснить для вас пару вещей:

  • на стороне сервера: вы создаете сокет, привязываете его и прослушиваете соединения.
  • на стороне клиента: вы создаете сокет, а затем пытаетесь подключиться к серверу.

Со стороны сервера в вашем случае все в порядке, однако на стороне клиента вам нужно удалить эту строку:

s.bind(("127.0.0.1",port))

Обычно вы делаете что-то вроде этого, например:

ip = '127.0.0.1'
port = 1234
s.connect((ip, port))
s.send("hello".encode("utf-8"))
while True:
    s.send(input().encode("utf-8"))
person Mousa Halaseh    schedule 03.07.2018
comment
Удалена строка s.bind() в клиенте, и все равно появляется то же исключение, но спасибо за это. - person Joe Evans; 03.07.2018
comment
убедитесь, что ваши отступы верны, и вы правильно закрываете сокеты, так как это причина, по которой вы получаете эту ошибку, я думаю, вы пытаетесь использовать сокет после вызова выключения или чего-то подобного . надеюсь, это сработает для вас - person Mousa Halaseh; 03.07.2018
comment
После исправления моих отступов у меня все еще есть эта ошибка. - person Joe Evans; 03.07.2018