我使用这个聊天服务器/客户端我在尝试运行客户端时出现问题 我在windows下使用python 3.4进行该行
ready_to_read,ready_to_write,in_error = select.select(socket_list , [], [])
WinError 10038尝试对非套接字
的操作进行操作当我更改此行socket_list = [sys.stdin,s] to socket_list = [s]
时,错误消失,但程序则不等待来自客户端的输入
任何想法?
这是代码
# chat_client.py
import sys
import socket
import select
def chat_client():
#if(len(sys.argv) < 3) :
# print ('Usage : python chat_client.py hostname port')
# sys.exit()
host = 'localhost'
port = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2)
# connect to remote host
try :
s.connect((host, port))
except :
print ('Unable to connect')
sys.exit()
print ('Connected to remote host. You can start sending messages')
sys.stdout.write('[Me] '); sys.stdout.flush()
prompt()
while 1:
socket_list = [sys.stdin,s]
# Get the list sockets which are readable
ready_to_read,ready_to_write,in_error = select.select(socket_list , [], [])
for sock in ready_to_read:
print('tset')
if sock == s:
# incoming message from remote server, s
data = sock.recv(4096)
if not data :
print ('\nDisconnected from chat server')
sys.exit()
else :
#print data
sys.stdout.write(data)
sys.stdout.write('[Me] '); sys.stdout.flush()
else:
print('tset')
# user entered a message
#msg= input()
msg = sys.stdin.readline()
s.send(msg)
sys.stdout.write('[Me] '); sys.stdout.flush()
if __name__ == "__main__":
sys.exit(chat_client())
答案 0 :(得分:0)
请注意,在Windows上,它仅适用于套接字;在其他操作系统上,它也适用于其他文件类型(特别是在Unix上,它适用于管道)。它不能用于常规文件,以确定文件自上次读取后是否已增长。
也许问题来自于Windows的限制。
编辑:
这确认了Windows上的问题:
select.select(rlist,wlist,xlist [,timeout])
允许空序列,但接受三个空序列是平台相关的。 (众所周知,它可以在Unix上运行,但不能在Windows上运行。)
您应该看到doc的Note部分,它提供了WinSock Library的解决方法: https://docs.python.org/2/library/select.html?highlight=select#select.select