【发布时间】:2014-11-28 08:47:05
【问题描述】:
我使用此聊天服务器/客户端尝试运行客户端时遇到问题 我在 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())
【问题讨论】: