【发布时间】:2015-03-09 16:56:01
【问题描述】:
答案:使用tornado模块和errno模块的IOLoop类。
另外,这是一篇关于主题的好文章:Async I/O and Python
当客户端无需等待服务器重播即可写入时,我尝试编写公共聊天。我想在客户端可以随时发送消息(当他输入他键入的消息时)发送消息期间随时打印服务器的消息。
我知道它可以通过线程来完成,但我也知道它可以通过 msvcrt 模块来完成。
这是我现在得到的客户端聊天:
def list2string(my_msg):
s = ""
for item in my_msg:
s += item
return s
import socket, sys, select, msvcrt
my_socket = socket.socket()
my_socket.connect(('127.0.0.1', 1733))
socket_messages = [my_socket]
my_msg = []
try:
while 1:
rlist, wlist, xlist = select.select(socket_messages, socket_messages, [])
for sock in rlist:
if sock is my_socket:
msg = my_socket.recv(1024)
print msg
if msvcrt.kbhit(): # if the client typed character
char = msvcrt.getch() # get this character
if chr(13) is char: # if enter
my_string_msg = list2string(my_msg)
print '[Me]', my_string_msg
my_socket.send(my_string_msg)
my_msg = []
elif ord(char) == 8: #backspace
my_msg.pop()
else:
# else just show the character in the line
# sys.stdout.write(char) --> this command?
# but then if the server would message it will be mixed with it.
my_msg.append(char)
finally:
my_socket.close()
如您所见,主要问题是如何编写客户端在服务器发送的打印消息期间键入的字母。
【问题讨论】:
标签: python sockets python-2.7 select msvcrt