Python基于select實(shí)現(xiàn)的socket服務(wù)器
本文實(shí)例講述了Python基于select實(shí)現(xiàn)的socket服務(wù)器。分享給大家供大家參考,具體如下:
借鑒了asyncore模塊中select.select的使用方法
import socket import traceback import select EOL1 = b'\n\n' EOL2 = b'\n\r\n' socketmap = {} r,w,e = [],[],[] response = b'HTTP/1.0 200 OK\r\nDate: Mon, 1 Jan 1996 01:01:01 GMT\r\n' response += b'Content-Type: text/plain\r\nContent-Length: 13\r\n\r\n' response += b'Hello, world!' serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) serversocket.bind(('0.0.0.0', 23456)) serversocket.listen(1) #serversocket.setblocking(0) listening_fileno = serversocket.fileno() socketmap[listening_fileno] = serversocket print 'listening_fileno',listening_fileno try: while True: r,w,e = [],[],[] for fd in socketmap: r.append(fd) w.append(fd) e.append(fd) r,w,e = select.select(r,w,e,1) for fd in r: request = b'' isocket = socketmap[fd] if fd == listening_fileno: print 'accepting' clientsock,clientaddr = isocket.accept() #clientsock.setblocking(0) cli_fileno = clientsock.fileno() r.append(cli_fileno) w.append(cli_fileno) e.append(cli_fileno) socketmap[cli_fileno] = clientsock else: print 'reading' while EOL1 not in request and EOL2 not in request: request += isocket.recv(1024) print(request.decode()) for fd in w: print 'writing' osocket = socketmap[fd] osocket.send(response) for fd in e: esocket = socketmap[fd] print 'socket close',fd esocket.close() del socketmap[fd] print "no data coming" except Exception,e: print traceback.print_exc() serversocket.close()
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計(jì)有所幫助。
- Python網(wǎng)絡(luò)編程使用select實(shí)現(xiàn)socket全雙工異步通信功能示例
- python爬蟲之BeautifulSoup 使用select方法詳解
- 深入理解python中的select模塊
- Python通過select實(shí)現(xiàn)異步IO的方法
- Python的Django框架中的select_related函數(shù)對QuerySet 查詢的優(yōu)化
- Python中使用select模塊實(shí)現(xiàn)非阻塞的IO
- pycharm 使用心得(九)解決No Python interpreter selected的問題
- Python select及selectors模塊概念用法詳解
相關(guān)文章
pandas?Dataframe實(shí)現(xiàn)批量修改值的方法
這篇文章主要介紹了pandas?Dataframe實(shí)現(xiàn)批量修改值的方法,在使用dataframe的時候?有時候會碰到需要批量修改數(shù)據(jù)的時候,下面文章主要說明兩種情況使用iloc對某幾行某幾列進(jìn)行全部修該和對數(shù)據(jù)進(jìn)行判定后,相互+/-/*某個數(shù),使用內(nèi)置函數(shù),需要的朋友可以參考一下2022-06-06Python字典添加,刪除,查詢等相關(guān)操作方法詳解
這篇文章主要介紹了Python字典添加,刪除,查詢等相關(guān)操作方法詳解,需要的朋友可以參考下2020-02-02Pytorch中的torch.nn.Linear()方法用法解讀
這篇文章主要介紹了Pytorch中的torch.nn.Linear()方法用法,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02Pytorch如何打印與Keras的model.summary()類似的輸出(最新推薦)
這篇文章主要介紹了Pytorch如何打印與Keras的model.summary()類似的輸出,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07使用python實(shí)現(xiàn)滑動驗(yàn)證碼功能
這篇文章主要介紹了使用python實(shí)現(xiàn)滑動驗(yàn)證碼功能,本文通過示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08使用Python的Treq on Twisted來進(jìn)行HTTP壓力測試
這篇文章主要介紹了使用Python的Treq on Twisted來進(jìn)行HTTP壓力測試,基于Python中的Twisted框架,需要的朋友可以參考下2015-04-04