套接字服务器的客户端未抛出错误,该错误表明操作不是在套接字上进行的

时间:2018-10-31 15:05:31

标签: python sockets

我正在学习制作的套接字服务器的客户端出现此错误。我搜索了错误,发现了几篇文章,但它们似乎与我的问题无关。

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 :(得分:0)

这将在* nix系统上运行,但是您不能在Windows的select中使用普通文件的描述符:请参见https://docs.python.org/3.5/library/select.html中的文档说明:

  

注意 Windows上的文件对象是不可接受的,但套接字是可接受的。在Windows上,底层的select()函数由WinSock库提供,并且不处理不是源自WinSock的文件描述符。