Клиентская сторона сервера сокетов не выдавала ошибку, которая говорит, что операция предпринималась на чем-то, что не является сокетом - PullRequest
0 голосов
/ 31 октября 2018

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

Traceback (most recent call last):
  File "C:/Users/Sam/PycharmProjects/prog0/client.py", line 13, in <module>
    socketRead, socketWrite, socketError = select.select(sockets, [], [])
OSError: [WinError 10038] An operation was attempted on something that is not a socket

Может кто-нибудь помочь объяснить мне, в чем может быть проблема, потому что, честно говоря, понятия не имею. Клиент подключается к серверу до появления этой ошибки.

import select
import socket
import sys

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
IP_ADDRESS = '127.0.0.1'
PORT = 12000

server.connect((IP_ADDRESS, PORT))

while True:
    sockets = [sys.stdin, server]
    socketRead, socketWrite, socketError = select.select(sockets, [], [])

    for s in socketRead:
        if s == server:
            msg = s.recv(1024)
            print(msg)
        else:
            msg = sys.stdin.readline()
            server.send(msg)
            sys.stdout.write("<You>")
            sys.stdout.write(msg)
            sys.stdout.flush()

server.close()

1 Ответ

0 голосов
/ 31 октября 2018

Это будет работать в * nix системе, но вы не можете использовать обычный дескриптор файла в select в Windows: см. Примечание к документации в https://docs.python.org/3.5/library/select.html:

Примечание Файловые объекты в Windows недопустимы, но имеются сокеты. В Windows базовая функция select() предоставляется библиотекой WinSock и не обрабатывает файловые дескрипторы, которые не происходят из WinSock.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...