0
我一直在四處尋找,但我一直無法解決我在聊天客戶端遇到的問題。如何避免使用套接字阻塞(聊天客戶端)
問題出在這裏:我最近決定改變客戶端,以便它允許用戶輸入他們想要的任何消息,而不必等待回覆(阻止或阻止我的程序直到回覆)
我決定使用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)做它,所以它不會阻止(?)(帶或不帶它仍然卡)
感謝您抽空看看
我會看看我能做什麼,但我是全新的隊列和線程。我要廢棄select.select模塊嗎?然後只使用線程和隊列?或者將select.select與線程和隊列結合起來? http://i.imgur.com/xVyoSl.jpg – Micrified 2013-03-07 19:06:56
我沒有想法該怎麼做。現在一整天,我可能會接近0.000001%。我該如何使用線程和隊列?沒有任何文檔可以幫助我使用套接字進行設置。就我所知,我可以創建一個隊列。但是我所要做的就是陷入同樣的問題中。 – Micrified 2013-03-07 20:30:53
對不起,我一整天都很耐心,現在我已經足夠迷路了。 – Micrified 2013-03-07 20:31:28