为了尝试使用Windows在Python中使用聊天系统,我在客户端使用了以下代码:
chat_client.py
import sys, socket, select
def chat_client():
if(len(sys.argv) < 3) :
print 'Usage : python chat_client.py hostname port'
sys.exit()
host = sys.argv[1]
port = int(sys.argv[2])
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()
while 1:
socket_list = [sys.stdin, s]
# Get the list sockets which are readable
read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])
for sock in read_sockets:
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 :
# user entered a message
msg = sys.stdin.readline()
s.send(msg)
sys.stdout.write('[Me] '); sys.stdout.flush()
if __name__ == "__main__":
sys.exit(chat_client())
但是,我在尝试连接到服务器(也在Python中运行)时收到以下错误:
select.error:(10038,'尝试对非套接字的操作')
这与sys.stdin有关 .
我认为这是Windows上的文件对象不可接受的问题,但是套接字是 . 在Windows上,底层选择函数由WinSock库提供,不处理不是源自WinSock的文件描述符 .
有没有解决方法来允许在Windows上实现 chat_client.py 代码的方法?
1 回答
您可以定期检查输入活动,例如: G . 用_替换你的
select
语句请注意,在此示例方法中,当一个人开始输入一行时,只有在输入行完成后才会显示传入的消息 .