命令列模式下,tcp伺服器端,返回靜態頁面
port不傳參則可以直接執行
sys.ar** 是命令列輸入後的內容列表[***.py, www]
python ***.py www
# 匯入包
import socket
import threading
import sys
# 物件導向:
# 抽象物件
# 名字 httpwebserver
# 屬性 伺服器socket
# 方法 初始化方法 __init__()
# 啟動方法 start()
# 創套接字
tcp_server = socket.socket(socket.af_inet, socket.sock_stream)
# 設定埠復用
tcp_server.setsockopt(socket.sol_socket, socket.so_reuseaddr,
true
)# 繫結埠號
tcp_server.bind((""
, port)
)# 設定監聽模式
tcp_server.listen(
128)
self.tcp_server = tcp_server
defstart
(self)
:while1:
# 等待連線
new_client, client_id = self.tcp_server.accept(
)print
("新的客戶端連線:"
, client_id)
# handle(new_client, client_id) # 函式模式
# 建立子執行緒
handle_th = threading.thread(target=self.handle, args=
(new_client, client_id)
) handle_th.daemon =
true
handle_th.start(
) @staticmethod
defhandle
(new_client, client_id)
:# 接收訊息
data = new_client.recv(
4096
)# 空訊息則列印關閉資訊,continue
iflen
(data)==0
:print
("瀏覽器已斷開"
, client_id)
new_client.close(
)return
# 請求頭拆分
msg = data.decode(
)print
(msg)
msg_list = msg.split(
" ",2)
file_name = msg_list[1]
if file_name ==
"/":
file_name =
"/index.html"
try:
# 開啟對應的網頁內容
with
open
("static"
+ file_name,
"rb")as
file
: file_data =
file
.read(
)except exception:
# 沒有則報錯
print
("沒有找到相應的內容,向瀏覽器報錯。"
)with
open
("static/error.html"
,"rb")as
file
: file_data =
file
.read(
)# 響應行
# 響應頭
response_head =
"server: psw1.0\r\n"
# 響應體
response_body = file_data
else
:# 響應行
# 響應頭
response_head =
"server: psw1.0\r\n"
# 響應體
response_body = file_data
# finally合成響應內容,關閉套接字
("埠號應該是整數"
多執行緒TCP程式伺服器端
多執行緒tcp程式伺服器端 1.建立serversocket物件,指定監聽的埠號。2.把accept 方法作為迴圈條件,迴圈監聽客戶端請求。3.建立執行緒類,定義乙個socket型別的成員變數,並定義乙個可以為他賦值的建構函式方法。4.在run 方法中使用socket變數進行任意的通訊操作。5.在主...
多執行緒伺服器端的實現
1.單cpu系統中如何同時執行多個程序?請解釋該過程中發生的上下文切換。答 只有1個cpu cpu的運算裝置core 的系統中不是也可以同時執行多個程序嗎?只是因為系統將cpu時間分成了多個微小的塊後分配給了多個程序。為了分時使用cpu,需要 上下文切換 的過程。2.為何執行緒上下文切換更快?執行緒...
實現伺服器端的多執行緒SOCKET Server
想要實現的功能 在伺服器端有乙個控制台程式 或者windows服務 與多個客戶端程式通訊,其中主線程有乙個socket繫結在乙個固定埠上,負責監聽客戶端的socket資訊。每當啟動乙個客戶端程式,客戶端傳送來乙個socket連線請求,server端就新開啟乙個執行緒,並在其中建立乙個socket與該...