Re: [問題] kill socket thread

看板Python作者 (←這人是超級笨蛋)時間14年前 (2011/11/22 16:47), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《b60413 (None)》之銘言: : 目前使用Python+Qt在撰寫一個Socket : 目前想要在Thread中中止一個的Socket(blocking) : 原以為只要中止Thread後,Socket就會自動結束 : 但後來發現Thread中止後,Socket能然會繼續等待連線 : 不知道有什麼樣的發法可以中止Socket? : 謝謝 : (下面附上部分Socket程式碼) : P.S Thread是使用Qt的QThread,Socket是使用python QThread 結束的時候會發出一個 finished() signal 把它接到一個 method, 然後在裡面關掉 socket 就行了 接著你前面的程式來寫, 就可以寫成這樣... : def __init__(self,port): : QThread.__init__(self) : self.__port=port : self.__socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) : self.__socket.bind(('',self.__port)) : self.__socket.listen(1) self.finished.connect(self.close) : def run(self): : while True: : try: : (conn,addr)=self.__socket.accept() #Wait Connect : except (socket.timeout,socket.error): : pass : else: : data=conn.recv(1024) #Receive Data : print "%s send %s\n" % (addr[0],data) : conn.send("Server Echo %s" % (data)) #Send Data def close(self): # 在這裡把 socket 結束掉 pass 說到 QThread, 前陣子在 C/C++ 板有一些討論 有篇文章寫得很好, 不過我一時找不到, 等我去爬一下之前的文章再補網址 裡面解釋 QThread 的特性和陷阱解釋得很詳盡 另外如果你不是非得用 blocking socket 不可 那麼 QSocketNotifier 會是比較好的選擇 -- Les grandes et les meilleurs tone from "Zadok the Priest" Eine grosse stattliche Veranstaltung by F. Handel THE MAIN EVENT! These are the men Sie sind die Besten "Champions League" by Tony Britten THESE ARE THE CHAMPIONS! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.81.146

11/22 16:48, , 1F
找到了, 討論串 #1DcpUZE6 (C_and_CPP) [ptt.cc]
11/22 16:48, 1F

11/22 16:49, , 2F
前面提到的文章 http://goo.gl/H5SE2
11/22 16:49, 2F

11/23 09:14, , 3F
感謝分享!
11/23 09:14, 3F
文章代碼(AID): #1Eos6fha (Python)
討論串 (同標題文章)
文章代碼(AID): #1Eos6fha (Python)