from socket import * #匯入socket包中的所有內容from time import ctime #匯入time包,同時在本地可使用ctime進行調用import thread #匯入Python線程包 HOST='localhost'#定義主機PORT=21567#定義連接埠BUFSIZ=1024 #定義緩衝區ADDR=(HOST,PORT) #定義元組 tcpSerSock=socket(AF_INET,SOCK_STREAM) #產生sockettcpSerSock.bind(ADDR) #將地址及連接埠元組與socket綁定tcpSerSock.listen(1) #監聽使用者請求 def client(tcpCliSock,num): #定義函數。由於thread強行要求調用的函數必須有兩個參數。num只是充數,沒有特別含義 CliSock=tcpCliSock #將傳遞進來的用戶端socket賦值給CliSock while True: #定義無限迴圈 data=CliSock.recv(BUFSIZ) #從使用者socket中讀取1024大小資料 if not data: #如果用戶端沒有任何輸入,即直接斷行符號或Ctrl+D break #跳出無限迴圈 CliSock.send('[%s] %s' %(ctime(),data)) #返回使用者輸入並附加當前系統時間 sys.exit #結束進程 while True: #定義無限迴圈 print "waiting ...." #列印等待使用者輸入時的waiting tcpCliSock,addr=tcpSerSock.accept() #處理使用者請求 print 'con from :',addr #列印用戶端資訊 thread.start_new_thread(client,(tcpCliSock,1)) #在Python中使用線程就靠這句了!Python會開始一個新的線程來運行client函數並以元組的形式傳遞給這個函數參數! tcpSerSock.close() #這句依然不會執行!
threading是官方推薦編寫線程使用的模組。還是有必要瞭解thread的,不僅可以讓我們更加瞭解系統線程的運行方式,也能找到thread與threading及Queue之間的區別,進而更好的學習掌握threading! 下面是Python用戶端程式。如果你可以使用telnet進行測試,那麼以下內容可以忽略。
from socket import * HOST='localhost'PORT=21567BUFSIZ=1024ADDR=(HOST,PORT) tcpCliSock=socket(AF_INET,SOCK_STREAM)tcpCliSock.connect(ADDR) while True: data=raw_input("> ") if not data: break tcpCliSock.send(data) data=tcpCliSock.recv(BUFSIZ) if not data: break print data tcpCliSock.close()
原文地址:http://president.blog.51cto.com/4990508/1081542