Python 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的web服務(wù)器
import re
import socket
def service_cilent(new_socket):
request = new_socket.recv(1024).decode("utf-8")
# Python splitlines() 按照行('\r', '\r\n', \n')分隔,返回一個(gè)包含各行作為元素的列表,如果參數(shù) keepends 為 False,不包含換行符,如果為 True,則保留換行符。
request_lines = request.splitlines()
print(request_lines)
file_name = ""
ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])
if ret:
file_name = ret.group(1)
if file_name == "/":
file_name = "index.html"
try:
f = open(file_name, "rb")
except:
response = "HTTP/1.1 404 NOT FOUND\r\n\r\n"
response += "------file not found-----"
new_socket.send(response.encode("utf-8"))
else:
# 打開(kāi)文件成功就讀文件 然后關(guān)閉文件指針
html_content = f.read()
f.close()
# 準(zhǔn)備發(fā)送給瀏覽器的數(shù)據(jù)---header
response = "HTTP/1.1 200 OK\r\n\r\n"
# 將response header發(fā)送給瀏覽器
new_socket.send(response.encode("utf-8"))
# 將response body發(fā)送給瀏覽器
new_socket.send(html_content)
# 關(guān)閉套接字
new_socket.close()
def main():
# 創(chuàng)建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 綁定
tcp_server_socket.bind(("", 7089))
# 監(jiān)聽(tīng)套接字
tcp_server_socket.listen(128)
while True:
new_socket, cilent_addr = tcp_server_socket.accept()
service_cilent(new_socket)
# 關(guān)閉監(jiān)聽(tīng)套接字
tcp_server_socket.close()
if __name__ == '__main__':
main()
以上就是Python 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的web服務(wù)器的詳細(xì)內(nèi)容,更多關(guān)于python 實(shí)現(xiàn)web服務(wù)器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python Tornado實(shí)現(xiàn)WEB服務(wù)器Socket服務(wù)器共存并實(shí)現(xiàn)交互的方法
- Python Web靜態(tài)服務(wù)器非堵塞模式實(shí)現(xiàn)方法示例
- python3實(shí)現(xiàn)微型的web服務(wù)器
- Python面向?qū)ο笾甒eb靜態(tài)服務(wù)器
- python實(shí)現(xiàn)靜態(tài)web服務(wù)器
- Tornado Web Server框架編寫(xiě)簡(jiǎn)易Python服務(wù)器
- Python Web程序部署到Ubuntu服務(wù)器上的方法
- python快速建立超簡(jiǎn)單的web服務(wù)器的實(shí)現(xiàn)方法
- Python實(shí)現(xiàn)簡(jiǎn)易版的Web服務(wù)器(推薦)
- python探索之BaseHTTPServer-實(shí)現(xiàn)Web服務(wù)器介紹
相關(guān)文章
python深度學(xué)習(xí)tensorflow1.0參數(shù)初始化initializer
這篇文章主要為大家介紹了python深度學(xué)習(xí)tensorflow1.0參數(shù)初始化initializer示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Python實(shí)現(xiàn)識(shí)別圖片和掃描PDF中的文字
在處理掃描的PDF和圖片時(shí),文字信息往往無(wú)法直接編輯、搜索或復(fù)制,這給信息提取和分析帶來(lái)了諸多不便,所以本文將介紹如何使用Python及相關(guān)OCR庫(kù)實(shí)現(xiàn)對(duì)圖片和掃描PDF中文字的識(shí)別,需要的可以了解下2025-02-02
python讀取.mat文件的數(shù)據(jù)及實(shí)例代碼
這篇文章主要介紹了python讀取.mat文件的數(shù)據(jù)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07
python安裝mysql的依賴(lài)包mysql-python操作
這篇文章主要介紹了python安裝mysql的依賴(lài)包mysql-python操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
pycharm安裝django框架詳細(xì)圖文教程(指定版本)
這篇文章主要給大家介紹了關(guān)于pycharm安裝django框架(指定版本)的相關(guān)資料,PyCharm是一種Python?IDE,帶有一整套可以幫助用戶(hù)在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,需要的朋友可以參考下2023-10-10
python數(shù)據(jù)分析數(shù)據(jù)標(biāo)準(zhǔn)化及離散化詳解
這篇文章主要為大家詳細(xì)介紹了python數(shù)據(jù)分析數(shù)據(jù)標(biāo)準(zhǔn)化及離散化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
python+Matplotlib?繪制帶置信區(qū)間的折線圖
這篇文章主要介紹了python繪制帶置信區(qū)間的折線圖,在本文中,我們將使用?numpy?模塊生成隨機(jī)數(shù)據(jù),并使用?matplotlib?庫(kù)實(shí)現(xiàn)數(shù)據(jù)可視化,需要的朋友可以參考下2023-05-05
利用Python和C語(yǔ)言分別實(shí)現(xiàn)哈夫曼編碼
這篇文章主要為大家詳細(xì)介紹了如何利用Python和C語(yǔ)言分別實(shí)現(xiàn)哈夫曼編碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-07-07

