手寫走通HTTP server 第二版本

2022-01-29 09:53:50 字數 3257 閱讀 1344

1 接收客戶請求

2 解析客戶端請求

3 組合資料,形成http response

4 將資料傳送給客戶端

公升級 :

1 多執行緒接收客戶端請求

2 基本的請求解析,根據請求返回資料(相應內容)

3 除了可以請求靜態網頁,也可以請求簡單的資料

4 將功能封裝在乙個類中

1多執行緒併發

2可以請求簡單資料

3能進行簡單請求解析

4結構使用類進行封裝

'''import

socket, os, sys, traceback

from threading import

thread

#封裝具體的伺服器功能

建立 self.sockfd =socket.socket()

self.sockfd.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

self.sockfd.bind(self.server_addr)

def serve_forever(self):#

啟動self.sockfd.listen()

print('

listen the prot:%s

' %self.port)

while

true:

try:

confd, addr =self.sockfd.accept()

except

keyboardinterrupt:

self.sockfd.close()

sys.exit(

'伺服器退出')

except

exception:

traceback.print_exc()

continue

#建立新的執行緒處理請求

t = thread(target=self.handle, args=(confd,))

t.daemon =true

t.start()

defhandle(self, confd):

#接收客戶端請求

data = confd.recv(1024)

#解析請求內容

dataheader =data.splitlines()

#獲取具體請求內容

getrequest = str(dataheader[0]).split('

')[1]

urls = ['

/','

/index

','/index_1

','/index_2']

if getrequest == '/'

or getrequest[-5:] == '

.html

':#獲取主頁

print('

已進行來')

self.get_html(confd)

elif getrequest in urls: #

獲取下級頁面

self.get_data(confd,getrequest)

else

: self.error_(confd)

confd.close()

def get_data(self, confd,getreques):#

獲取頁面資料

出錯處理

首頁處理

位址 server_static_dir = os.getcwd()#

靜態頁面目錄

#生成物件

#啟動伺服器

array c 實現,第二版

include include include include using namespace std namespace mylib array const array coll alloc coll.alloc size coll.size ia null array const pointer...

Effective Java 中文第二版

第2章 建立和銷毀物件 第1條 考慮用靜態工廠方法代替構造器 第2條 遇到多個構造器引數時要考慮用構建器 第3條 用私有構造器或者列舉型別強化singleton屬性 第4條 通過私有構造器強化不可例項化的能力 第5條 避免建立不必要的物件 第6條 消除過期的物件引用 第7條 避免使用終結方法 第3章...

Effective Java 中文第二版

第2章 建立和銷毀物件 第1條 考慮用靜態工廠方法代替構造器 第2條 遇到多個構造器引數時要考慮用構建器 第3條 用私有構造器或者列舉型別強化singleton屬性 第4條 通過私有構造器強化不可例項化的能力 第5條 避免建立不必要的物件 第6條 消除過期的物件引用 第7條 避免使用終結方法 第3章...