此外,这是一篇关于这个主题的好文章: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()
如您所见,主要问题是如何编写客户端在服务器发送的打印消息中键入的字母。