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)  #生成socket
tcpSerSock.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=21567
BUFSIZ=1024
ADDR=(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()