asyncore 写的网络聊天时客户端
先贴上代码吧,这个是我所写的客户端程序,包括服务器端的程序,用到的模块有asyncore
问题在于客户端如何搜集用户的键盘输入并发送到服务器端,大家看我的客户端代码可以看出,只有当服务器端给我的客户端发送内容的时候,我的客户端才会收集用户输入,在这种情况下会出现如下问题:
例如,我登陆服务器,服务器发送一句“欢迎登陆”给我的客户端程序后,我才可以输入”login 用户名“来登陆,但是我登陆完后,由于服务器没有发送”你已经登录“这样的消息,我的程序就不会收集我的输入,让我执行别的任务。
其实看到这里了,你也许觉得我很蛋疼,只要在我的执行每条命令后服务器都发送相关信息给我触发handle_read() 就可以了,我不想这样做,因为我做得这样做是一种妥协而且很奇怪的方法。但是我了解asyncore和asynchat模块后,我找不到如何随时收集用户输入的方法,所以来请问大家。
#!/usr/bin/env python3
import asyncore
__author__ = 'tcstory'
PORT=5005
HOST='127.0.0.1'
class ChatClient(asyncore.dispatcher):
def __init__(self, host, port):
super().__init__()
self.create_socket()
self.connect((host, port))
self.buffer = ''
def handle_read(self):
print(self.recv(1024).decode())
self.buffer = input()+'\r\n'
def writable(self):
return (len(self.buffer) > 0)
def handle_write(self):
sent = self.send(self.buffer.encode())
self.buffer = self.buffer[sent:]
client = ChatClient(HOST, PORT)
asyncore.loop()
这个是服务器端的程序,这个不是重点,所以我就补贴在这里了。
http://codepad.org/lexVLyu8