0
我有一個服務器應該接受多個客戶端,但由於某種原因,當它啓動客戶端的新線程時,它不會繼續while循環,直到客戶端已斷開。雖然開始一個新線程後循環不繼續(python)
此外,while循環停止select.select並且不會繼續,直到sock.accept的掛起連接。它也不能正常斷裂,使插座收盤後我self.serverstatus值更改爲0
這裏是服務器
編輯代碼:修正了含線ct.run()來克拉。啓動()
def serverstart(self):
self.buttonswitch("1")
self.host = self.intip
self.port = 5000
s = socket.socket(socket.AF_INET6)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((self.host, self.port))
inputs = [ s ]
s.listen(5)
self.serverstatus = "1"
while True:
inputready, outputready, exceptready = select.select(inputs, [], [])
if inputready != " " and self.serverstatus == "1":
c, addr = s.accept()
ct = threading.Thread(target=self.client_thread, args=[c, addr])
ct.start()
elif self.serverstatus == "0":
break
s.close()
print "Closing socket"
self.buttonswitch("0")
def client_thread(self, c, addr):
print "Connection from: " + str(addr)
while True:
data = c.recv(1500)
print len(data)
if not data:
break
data = str(data).upper()
c.send(data)
if self.serverstatus == "0":
break
c.close()
爲什麼'self.serverstatus'應該在哪裏改變它的值?難道它也可能是while循環保持循環,你只是沒有注意到? –
您需要調用啓動並且不在Thread實例上運行。 –
self.serverstatus在從按鈕切換時應更改值。我試圖在while循環中打印文本來查看它是否確實循環,但由於某種原因它被卡住到包含 「inputready,outputready,exceptready = select.select(inputs,[],[])」的行中「 直到它獲得連接。我通過在頂部和底部有一條打印線進行測試,只有在頂部的代碼被執行,直到傳入的連接允許它繼續。 – Nyoa