私は一日中見回していましたが、ここでチャットクライアントで発生した問題を解決できませんでした。
問題は次のとおりです。最近、クライアントを変更して、ユーザーが最初に返信を待たずに必要なメッセージを入力できるようにすることにしました(返信が届くまでプログラムをブロックするか何かが停止します)
select.selectモジュールを使用してこれを行うことにしましたが、今日、クライアントのいくつかの異なるバージョンを作成して動作させようとした後、この時点で立ち往生し続けています。
メッセージを入力するたびに、ループがどこかでスタックします(おそらく.recvデータで)これを修正するにはどうすればよいですか?私が試みたものは、それをうまくやらせることはできません。
編集:より明確にするために、実行すると、メッセージを入力し、Enterキーを押すと、何も起こりません。それはそのように実行され続けます。
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)は、ブロックされないようにしません(?)(それがまだスタックしている場合とない場合)
ご覧いただきありがとうございます