import multiprocessing
import socket
import re
class webservice(object):
def __init__(self):
# 建立套接字
self.socket_server = socket.socket(socket.af_inet, socket.sock_stream)
# 重複利用乙個埠不會報錯
self.socket_server.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)
# 繫結ip,埠
self.socket_server.bind(("", 9900)) # 如果ip為本地,則可以不寫
# 開始監聽
self.socket_server.listen(128)
def service_client(self, new_socket):
# 接收客戶端傳送的資料
requestheader = new_socket.recv(1024).decode("utf-8")
file_list = requestheader.splitlines()
filename = ""
ret = re.match(r"[^/]+(/[^ ]*)", file_list[0])
if ret:
filename = ret.group(1)
print(filename)
if filename == "/":
print("*" * 100)
filename = "/index.html"
# 返回http資料給客戶端
try:
f = open("./html" + filename, "rb")
except:
# 有異常時執行
responseheader += "file not found 哈哈哈"
new_socket.send(responseheader.encode("utf-8"))
else:
# 沒有異常執行
# 傳送responseheader給客戶端
new_socket.send(responseheader.encode("utf-8"))
# 傳送responsebody給客戶端
new_socket.send(responsebody)
# 關閉套接字
new_socket.close()
def run(self):
"""用來控制整體"""
while true:
# 等待客戶端鏈結
new_socket, address = self.socket_server.accept()
# 為客戶端服務
p = multiprocessing.process(target=self.service_client, args=(new_socket,))
p.start()
new_socket.close()
# 關閉套接字
self.socket_server.close()
def main():
web_service = webservice()
web_service.run()
if __name__ == "__main__":
main()
web伺服器 簡單web伺服器實現
三次握手 一般情況下是瀏覽器先傳送請求資料,c s ack 應答 三次握手成功後,才開始進行通訊資料的收發。四次揮手 一般情況下是客戶端先關閉,給瀏覽器傳送關閉資訊。如果瀏覽器傳送了關閉資訊,但是伺服器沒有回過去,較慢 那麼瀏覽器一直發是不是就會有問題?所以會等待 2msl的時間。一般為2 5分鐘。...
C 實現簡單WEB伺服器
一 http協議的作用原理 www是以internet作為傳輸媒介的乙個應用系統,www網上最基本的傳輸單位是web網頁。www的工作基於客戶機 伺服器計算模型,由web 瀏覽器 客戶機 和web伺服器 伺服器 構成,兩者之間採用超文字傳送協議 http 進行通訊。http協議是基於tcp ip協議...
python實現簡單的web伺服器
最近有需求需要提供乙個簡單的 web 伺服器,用於客戶端上報一些內容,採用 post 方式上報並支援 gzip 壓縮,如下 python coding utf 8 上報資料用 gzip 壓縮了,所以用 http 伺服器接收資料並輸出接收到的資料 只儲存過去7天的日誌,按天建立新的日誌 接收上報的檔案...