from socket import * #匯入socket包中的所有內容from time import ctime #匯入time包,同時在本地可使用ctime進行調用import os,sys #匯入os,sys包HOST='localhost'#定義主機PORT=21567#定義連接埠BUFSIZ=1024 #定義緩衝區ADDR=(HOST,PORT) #定義元組
tcpSerSock=socket(AF_INET,SOCK_STREAM) #產生sockettcpSerSock.bind(ADDR) #將地址及連接埠元組與socket綁定tcpSerSock.listen(5) #監聽使用者請求
r,w=os.pipe() #定義管道,處理序間通訊就靠他了!
while True: #定義無限迴圈 print "waiting ...." #列印等待使用者輸入時的waiting try:#檢測可能的異常 tcpCliSock,addr=tcpSerSock.accept() #處理使用者請求 os.write(w,"f") #在管道一側寫入字元“f” except:#處理異常 sys.exit(0)#如果發生異常將直接退出 if os.fork(): #在父進程中的處理 pass #跳過處理 else:#在子進程中的處理 print 'con from :',addr #列印用戶端資訊 while True: #定義無限迴圈 data=tcpCliSock.recv(BUFSIZ) #從用戶端接收1024大小的資料 os.write(w,data) #將資料寫入到道道中 if not data: #如果用戶端沒有任何輸入,即直接斷行符號或Ctrl+D tcpSerSock.close()#關閉用戶端連結 break#跳出無限迴圈 tcpCliSock.send('[%s] %s' %(ctime(),os.read(r,1024)))#否則回顯使用者資訊並附加目前時間!
tcpSerSock.close() #這句話依然不會被執行。
通過這兩個指令碼大家能否對Apache的profork模式有一個更清晰的認識?
本文出自 “林肯” 部落格,請務必保留此出處http://president.blog.51cto.com/4990508/1079464