我正在学习制作的套接字服务器的客户端出现此错误。我搜索了错误,发现了几篇文章,但它们似乎与我的问题无关。
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()
答案 0 :(得分:0)
这将在* nix系统上运行,但是您不能在Windows的select
中使用普通文件的描述符:请参见https://docs.python.org/3.5/library/select.html中的文档说明:
注意 Windows上的文件对象是不可接受的,但套接字是可接受的。在Windows上,底层的
select()
函数由WinSock库提供,并且不处理不是源自WinSock的文件描述符。