物件導向TCP伺服器端多執行緒

2021-10-04 02:51:00 字數 3038 閱讀 3091

命令列模式下,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與該...