鍍金池/ 問答/Python  HTML/ Python socket非阻塞模式 accept出現(xiàn)錯(cuò)誤,Python2

Python socket非阻塞模式 accept出現(xiàn)錯(cuò)誤,Python2



#encoding=utf-8
from socket import *
def main():
    PORT=5569
    HOST="127.0.0.1"
    ADDR=(HOST,PORT)
    serverSocket= socket(AF_INET,SOCK_STREAM)
    serverSocket.setblocking(False)

    serverSocket.bind(ADDR)
    serverSocket.listen(5)# 設(shè)置等待隊(duì)列的長度
    clientSocketList=[]
    while True:
        try:
            clientSocket, scAddr = serverSocket.accept()
            clientSocket.setblocking = False
            print "client accept", scAddr
            clientSocketList.append((clientSocket, scAddr))
        except Exception ,e:
             #print e
            pass


        for cSocket,cAddr in clientSocketList:
            try:
                packData = cSocket.recv(1024)

            except:
                pass
            else:
                if len(packData)>0:
                    print "clientData:",str(cAddr),str(packData)
                else:
                    print "client colse",cAddr
                    cSocket.close()
                    clientSocketList.remove((cSocket,cAddr))





if __name__=="__main__":
    main()

各位朋友好,問一個(gè)問題,上面中serverSocket設(shè)置了非阻塞模式。第一個(gè)while 出可以 不斷執(zhí)行,如果當(dāng)前沒有客戶端接入,那么此時(shí)會有accept方法拋出異常, 然后跳過 accept后面的方法。
當(dāng)有客戶端接入的時(shí)候會返回新接入的客戶端,然后執(zhí)行accept后面的 代碼,將當(dāng)前客戶端放入到一個(gè)列表中。

但是實(shí)際運(yùn)行結(jié)果卻是 accept方法一直拋出異常, 即使端點(diǎn)調(diào)試發(fā)現(xiàn)有新的客戶端接入 accept方法正確返回 結(jié)果,accept后面的代碼仍然沒有執(zhí)行,這個(gè)是為什么?

回答
編輯回答
哎呦喂

上面代碼寫錯(cuò)了
clientSocket.setblocking = False 錯(cuò)誤

clientSocket.setblocking(False)

2018年3月5日 02:23