我整天都在环顾四周,但我无法解决我在这里的聊天客户端遇到的问题。
这就是问题所在:我最近决定更改客户端,以便它允许用户输入他们想要的任何消息,而不必先等待回复(阻塞或某些事情会停止我的程序,直到有回复)
我决定使用 select.select 模块来做到这一点,但是在今天编写了几个不同版本的客户端试图让它工作之后,我一直卡在这一点上。
每当我输入一条消息时,循环就会卡在某个地方(可能在 .recv 数据处)我该如何解决这个问题?我没有尝试过让它去。
编辑:更清楚地说,当我跑步时,我到达了输入消息的位置,按回车键,然后什么也没有发生。它只是保持这样运行。
from socket import *
import select
import sys #because why not?
print("New Chat Client Using Select Module")
HOST = input("Host: ")
PORT = int(input("Port: "))
s = socket(AF_INET,SOCK_STREAM)
print("Trying to connect....")
s.connect((HOST,PORT))
s.setblocking(0)
# Not including setblocking(0) because select handles that.
print("You just connected to",HOST,)
# Lets now try to handle the client a different way!
while True:
Incoming_data = [s]
Exportable_data = []
Exceptions = []
User_input = input("Your message: ")
rlist,wlist,xlist = select.select(Incoming_data,Exportable_data,Exceptions)
if User_input == True:
Exportable_data += [User_input]
for i in rlist:
data = i.recv(1024)
if data == "":
continue
for i in wlist:
if Exportable_data is True:
i.send(Exportable_data)
continue
当它设置为接收数据时,有什么方法可以覆盖阻塞(我认为是问题)?不会 s.setblocking(0) 使它不会阻塞(?)(有或没有它仍然会卡住)
谢谢参观