靜態Web伺服器 命令列啟動動態繫結埠號

2021-09-26 06:41:17 字數 3248 閱讀 8317

##能夠寫出獲取終端命令列引數動態繫結埠號的web伺服器程式

獲取執行python程式的終端命令列引數

判斷引數的型別,設定埠號必須是整型

給web伺服器類的初始化方法新增乙個埠號引數,用於繫結埠號

import socket

import threading

import sys

# 定義web伺服器類

# 建立tcp服務端套接字

tcp_server_socket = socket.socket(socket.af_inet, socket.sock_stream)

# 設定埠號復用, 程式退出埠立即釋放

tcp_server_socket.setsockopt(socket.sol_socket, socket.so_reuseaddr, true)

# 繫結埠號

tcp_server_socket.bind(("", port))

# 設定監聽

tcp_server_socket.listen(128)

# 儲存建立成功的伺服器套接字

self.tcp_server_socket = tcp_server_socket

# 處理客戶端的請求

@staticmethod

def handle_client_request(new_socket):

# **執行到此,說明連線建立成功

recv_client_data = new_socket.recv(4096)

if len(recv_client_data) == 0:

print("關閉瀏覽器了")

new_socket.close()

return

# 對二進位制資料進行解碼

recv_client_content = recv_client_data.decode("utf-8")

print(recv_client_content)

# 根據指定字串進行分割, 最大分割次數指定2

request_list = recv_client_content.split(" ", maxsplit=2)

# 獲取請求資源路徑

request_path = request_list[1]

print(request_path)

# 判斷請求的是否是根目錄,如果條件成立,指定首頁資料返回

if request_path == "/":

request_path = "/index.html"

try:

# 動態開啟指定檔案

with open("static" + request_path, "rb") as file:

# 讀取檔案資料

file_data = file.read()

except exception as e:

# 請求資源不存在,返回404資料

# 響應行

# 響應頭

response_header = "server: pws1.0\r\n"

with open("static/error.html", "rb") as file:

file_data = file.read()

# 響應體

response_body = file_data

# 拼接響應報文

response_data = (response_line + response_header + "\r\n").encode("utf-8") + response_body

# 傳送資料

new_socket.send(response_data)

else:

# 響應行

# 響應頭

response_header = "server: pws1.0\r\n"

# 響應體

response_body = file_data

# 拼接響應報文

response_data = (response_line + response_header + "\r\n").encode("utf-8") + response_body

# 傳送資料

new_socket.send(response_data)

finally:

# 關閉服務與客戶端的套接字

new_socket.close()

# 啟動web伺服器進行工作

def start(self):

while true:

# 等待接受客戶端的連線請求

new_socket, ip_port = self.tcp_server_socket.accept()

# 當客戶端和伺服器建立連線程,建立子執行緒

sub_thread = threading.thread(target=self.handle_client_request, args=(new_socket,))

# 設定守護主線程

sub_thread.setdaemon(true)

# 啟動子執行緒執行對應的任務

sub_thread.start()

# 程式入口函式

def main():

print(sys.ar**)

# 判斷命令列引數是否等於2,

if len(sys.ar**) != 2:

print("執行命令如下: python3 ***.py 8000")

return

# 判斷字串是否都是數字組成

if not sys.ar**[1].isdigit():

print("執行命令如下: python3 ***.py 8000")

return

# 獲取終端命令列引數

port = int(sys.ar**[1])

# 建立web伺服器物件

# 啟動web伺服器進行工作

web_server.start()

if __name__ == '__main__':

main()

ipmitool 命令列重啟伺服器

我們所有得伺服器都有乙個console 口,當伺服器到了機房後,我們只需要將這個console 口連上線放通網路,我們就可以實現遠端管理這台server 不需要頻繁得去機房操作,這個console ip 也被叫為bmc ip 我們重啟server 我知道得是有三種方式 1.機房物理重啟 2.cons...

命令列啟動mysql服務

在 計算機網路 課程中曾學過net命令,可以用於啟動後台服務。在mysql中,net命令用於啟動後台伺服器程序mysqld,即後台服務。不過,如果在普通使用者模式下net start mysql是無法啟動mysql服務的,情況如下圖所示。普通使用者模式啟動mysql服務失敗 這是為什麼?原因在於,後...

每次登入伺服器命令列pip conda 命令出錯

參考 變數的問題,就再次更新.bashrc檔案,結果確實是這個問題。解決方案 每次登入是都更新一次環境變數檔案 設定.profile檔案 vim profile更改內容 if running bash if n bash version then include bashrc if it exist...