python之 socketserver模組的使用

2022-07-27 21:57:20 字數 2071 閱讀 4538

在我們正常的使用socket模組來寫乙個server的程式就會顯得比較的複雜通常一般流程為

1.生成socket例項物件

2.繫結位址

3.開始監聽

4.接收資料

一般demo為

#

伺服器import

socket

server = socket.socket() #

宣告socket型別,同時生成socket連線物件

server.bind(('

localhost

', 6969)) #

繫結要監聽的埠此時繫結的是本地

server.listen() #

監聽 括號裡面的就是最大允許鏈結

print('

等待**打進來')

coon, addr = server.accept() #

等待 (此時上面加乙個while 就可以多個**打進來並且進行通話)

#coon 就是客戶端連過來而在伺服器端為其生成的乙個連線例項

#addr 就是位址

print('

**打進來了')

print(coon, addr) #

將coon 與addr 顯示出來

while true: #

此時就可以一直不停的傳送資料了, 此時的效果就是乙個**可以無阻礙的通話

#如果此時沒有true的話就只能接收一次了

data = coon.recv(1024) #

接收資料

print('

recv:

', data.decode()) #

此時注意我們需要吧接收的資料解碼,因為發過來的是byte型別

coon.send(data.upper()) #

將資料裡面的字母轉化為大寫傳送

server.close()

這就是乙個單個接入,多次接收的server 

如果想用多個接入多個接收的話我們只需要在coon上加乙個while即可 ,對與server來說乙個coon就是喲個接入點

那麼我們的socketserver又是方便在何處呢

對於socketserver來說我們只需要修改頭節點就可以了

我們需要新建立乙個類在類裡面修改 socketserver . baserequesthandler即可

在這個類中hand結束即代表 當前連線斷開 

import

socketserver

class

my_tcphandler(socketserver.baserequesthandler):

defhandle(self):

while

true:

try:

self.data = self.request.recv(1024)

print("

{} wrote:

".format(self.client_address[0]))

print

(self.data)

self.request.send(self.data.upper())

#伺服器端到此結束

except

connectionreseterror as e:

print

(e)

break

host, post = "

localhost

", 9999server =socketserver.threadingtcpserver((host, post), my_tcphandler)

#併發 tcpserver改成 threadingtcpserver 在linux是建議使用forking來開多執行緒

server.serve_forever()

server =socketserver.threadingtcpserver((host, post), my_tcphandler) 時就是開了多執行緒可以多個接入,多個實時接收與傳送

這樣來看我們的的伺服器端的程式是不是便捷了呢?

socket程式設計之單程序socket server

套接字是一種程序間的通訊的方法,不同於以往介紹的程序間通訊方法的是,它並不侷限於同一臺計算機的資源,例如檔案系統空間,共享記憶體或者訊息佇列。套接字可以認為是對管道概念的擴充套件 一台機器上的程序可以使用套接字與另一台機器上的程序通訊。因此客戶與伺服器可以分散在網路中。同一臺機器上的程序間也可以用套...

用select模組實現的socket server

之前筆記裡面記錄的比較亂,最後我寫了乙個類,試著封裝成乙個模組的樣子。使用的時候通過繼承生成乙個子類,然後呼叫run執行。你應該需要重構其中的部分方法,另外可能還需要在子類中建立新的方法。至少需要重構onrecv方法,接收到資料後的處理。另外要發資料,呼叫send data介面,把conn連線和by...

python之異常處理 Python之異常處理

異常物件 請大家執行如下 a 100 0 print a 就會發現直譯器顯示如下的錯誤提示 traceback most recent call last file x.py line 1,in a 100 0 zerodivisionerror division by zero 大家要學會看直譯器...