說明:剛開始接觸python網絡編程,使用socket編寫一個簡單的單線程server。socket模塊提供了一個工廠函數,也被稱爲socket,開發者能夠調用函數以生成一個套接字對象S。要想執行網絡層操做,能夠調用S上的方法。在客戶程序中,能夠調用S.connect鏈接到一個服務器。在服務器程序中,能夠調用S.bind和S.listen等待客戶程序的鏈接。在客戶程序請求鏈接時,服務器程序能夠調用S.accept接受請求,該方法將返回鏈接到客戶程序的另外一個套接字對象S1.在有了一個鏈接的套接字對象以後,就能夠調用該對象的send方法傳輸數據,調用該對象的recv方法接收數據了。關於socket模塊提供的函數和socket對象提供的方法請讀者參閱python相關的技術書籍(例如《python技術手冊》)。 html
分三步: python
1.建立模塊對象 web
2.建立模塊對象的屬性 編程
3.調用模塊對象的方法完成模塊所想要實現的功能 服務器
【源碼以下】 網絡
#import socket module #建立模塊對象 from socket import * #建立模塊對象的屬性 serverSocket = socket(AF_INET, SOCK_STREAM) #Prepare a sever socket #調用方法綁定server監聽的主機IP在端口8000上的鏈接 serverSocket.bind(('',8000)) #監聽該套接字的鏈接嘗試,5表明容許的最多maxpending個排隊的鏈接嘗試 serverSocket.listen(5) print 'The server socket is ready...' while True: #Establish the connection print 'Ready to serve...' #接收一個請求並返回一個數據對(s1,(ipaddr,port)) connectionSocket, addr = serverSocket.accept() try: #從套接字接收數據,最多8192字節,返回有接收數據組成的字符串 message = connectionSocket.recv(8192) #取接收到的字符串的第2個單詞 filename = message.split()[1] #打開名字爲filename(這裏是取filename字符串的第二個字符到結尾)的文件 f = open(filename[1:]) outputdata = f.readlines(-1) for i in range(0, len(outputdata)): #發送數據 connectionSocket.send(outputdata[i]) #關閉鏈接套接字 connectionSocket.close() #錯誤處理 except IOError: #Send response message for file not found connectionSocket.send('404 Not found') #Close client socket connectionSocket.close() #關閉server的套接字 serverSocket.close()
【運行此程序】 socket
在源碼文件所在的目錄下建一個hello.html文件(裏面寫上任意文字,好比我寫的Hello world!)。在其餘任意一臺主機上的web browser地址欄輸入:http:\\serverHost:8000\hello.html回車便可看到你在html文件所寫的文字(serverHost是指你運行server的主機IP)。也能夠使用本機運行server腳本,在本機的browser上訪問server,把serverHost換成127.0.0.1或者localhost就能夠了。 函數
初學python,但願各位不吝賜教。請與我聯繫:jt_2010@hust.edu.cn spa