Python網路程式設計之SocketServer

2022-09-13 09:57:06 字數 2061 閱讀 1704

儘管 sockets 非常的有用,但是 python 並不滿足於僅提供乙個在大多數作業系統和大多數程式語言都提供的基於 c 語言似的 socket 介面。 python 走得更遠,提供了 socketserver——乙個提供讓你可以用簡單的**編寫基於 socket 的複雜服務端的類集合的模組。

建立乙個 socketserver 所要做的大部分工作是定義乙個請求處理( request handler )類。它是 socktserver 模組裡 baserequesthandler 類的子類,並且每乙個 request handler 物件在客戶端連線到服務端時處理著乙個客戶端的請求。這是在請求處理的 handle 方法裡實現的。當然請求處理也可以通過對 setup 和 finish 方法的過載來定義每個請求設定和請求拆下時的**。

baserequesthandler 子類方法可以接觸到下面三個變數:

request: 乙個 socket 物件代表著客戶端的請求。在 mirrorserver 例子裡 socket.accept 也返回這樣乙個物件。

繼承 streamrequesthandler 代替繼承 baserequesthandler ,你可以像檔案操作一樣對 socket 連線進行讀寫。 streamrequesthandler 提供了另外兩個變數:

rfile: 這個檔案對應著從 socket 進來的資料。等同於呼叫 request.makefile(『rb』) 。

wfile: 這個檔案對應著從 socket 傳送的資料。等同於呼叫 request.makefile(『wb』)。

通過用將 mirrorserver 重寫為乙個 socketserver 服務端(更確切,是乙個 tcpserver ),你可以省略 socket 配置和拆除的大量相關**,而專心地致力於文字的逆反工作。下面是 mirrorsocketserver.py:

mirrorsocketserver

#!/usr/bin/python

import socketserver

class requesthandler(socketserver.streamrequesthandler):

"handles one request to mirror some text"

def handle(self):

"""read from streamrequesthandler's provided rfile member,

which contains the input from the client.mirror the text

and write it to the wfile member, which contains the output

to be sent to the client."""

l = true

while l:

l = self.rfile.readline().strip()

if l:

self.wfile.write(l[::-1] + '\n')

if __name__ = '__main__':

import

sysif len(sys.ar**) < 3:

print 'usage: %s [hostname] [port number]' % sys.ar**[0]

sys.exit(1)

hostname = sys.ar**[1]

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

socketserver.tcpserver((hostname,port), requesthandler).serve_forever()

幾乎所有 socket 細節的**都沒有。無論什麼時候連線到這個服務端, tcpserver 類將傳遞正確的變數來建立乙個新的  requesthandler ,並呼叫 handle 方法來處理請求。

∵兩個服務端在網路上所接收輸入和傳送的輸出都是一樣的,∴前面我們所寫的 mirrorclient 也可以很好地與這個服務端工作。這個原則也適用於當你為精簡**面改變模組裡面函式的實現,但保留了介面的一致。

linux socket網路程式設計之socket屬性

1.函式用法 include include int getsockopt int sockfd,int level,int optname,void optval,socklen t optlen 函式用於獲得某個套接字的屬性 int setsockopt int sockfd,int level...

網路程式設計 Python網路程式設計詳解socket

1 伺服器就是一系列硬體或軟體,為乙個或多個客戶端 服務的使用者 提供所需的 服務 它存在唯一目的就是等待客戶端的請求,並響應它們 提供服務 然後等待更多請求。2 客戶端 伺服器架構既可以應用於計算機硬體,也可以應用於計算機軟體。3 在伺服器響應客戶端之前,首先會建立乙個通訊節點,它能夠使伺服器監聽...

Python網路程式設計之UDP

udp處理資料報,是一種無連線的協議 伺服器端 server socket.socket socket.af inet,socket.sock dgram 繫結ip server.bind 192.168.1.104 221 while true 接收 data,address server.rec...