如何進行Socket程式設計 Python文件簡翻

2021-08-15 13:55:58 字數 1884 閱讀 2629

本文著重討論inet(ipv4) sockets, 並限於stream(tcp) sockets範疇。

直到目前為止,在各類ipc(inter process communication)之中,socket仍然是最為流行的那個,尤其是對於跨平台通訊來說,socket是無可替代的存在。

s.connect(("www.python.org", 80))當connect結束後,我們使用socket s 來傳送乙個request來獲取頁面的文字,此socket將會讀取文字並被銷毀。客戶端的sockets通常只是一次性的。

而服務端的情況則會稍稍複雜一些。首先,web伺服器建立了乙個server socket:

# create an inet, streaming socket

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

# bind the socket to a public host, and a well-known port

serversocket.bind((socket.gethostname(), 80))

# become a server socket

serversocket.listen(5)

這裡有一些注意事項:我們使用了socket.gethostname(),所以此socket對於外界來說是可見的。而如果我們使用s.bind(('localhost', 80))或是s.bind(('127.0.0.0', 80))仍會得到服務端socket,不同的是只有本機才能看到這一socket。

使用s.bind(('', 80))則意味著本機擁有的任何位址均可獲得該socket。

第二件比較重要的事情是:數字較小的埠通常已經為其他的通用程式保留了,所以如果你想做測試,挑乙個較高的數字。

最後一句**中,listen的引數告訴socket庫我們最多保留5個連線請求,如果你其他的**沒問題,這個數量很充沛。

現在我們已經有了乙個服務端socket,它監聽著80埠,然後我們就可以建立web伺服器的核心迴圈了。

while true:

# accept connections from outside

(clientsocket, address) = serversocket.accept()

# now do something with the clientsocket

# in this case, we'll pretend this is a threaded server

ct = client_thread(clientsocket)

ct.run()

通常來說,這一迴圈可以如下三種方式運作:排程乙個執行緒去執行clientsocket,建立乙個新程序來執行clientsocket,或是使用非阻塞sockets來重構專案,並用select來復合服務端socket與任何活躍的clientsocket,具體內容稍後詳談。

一定要認識到:以上就是乙個服務端socket的全部工作,它不會傳送或接收任何資料,它僅僅生產客戶端socket。在乙個客戶端socket向繫結的主機和埠執行了connet()之後,clientsocket才會作為響應被建立。

一旦完成建立clientsocket的工作,我們就可以轉而監聽更多的連線,這兩個「客戶端」可以自由通訊——它們使用的動態分配埠將會在通訊結束後被**。

如何進行多執行緒程式設計

對於io操作來說,多執行緒比較好。1.通過threading例項化乙個物件 import time def get detail html url print get detail html time.sleep 2 print get detail html end def get detail ...

C 如何進行多執行緒程式設計

由於多執行緒程式設計非常複雜,這個小例子只能算是乙個入門線的知識點吧 首先建乙個應用程式專案,命名為threadexample,在窗體上放乙個文字框 textbox1 乙個標籤 lblresult 再放兩個按鈕,分別命名為btnstart btnstop。窗體 namespace threadexa...

如何進行Monkey Test

一 簡介 monkey是android中的乙個命令列工具,可以執行在模擬器裡或實際裝置中。它向系統傳送偽隨機的使用者事件流 如按鍵輸入 觸控螢幕輸入 手勢輸入等 實現對正在開發的應用程式進行壓力測試。monkey包括許多選項,它們大致分為四大類 基本配置選項,如設定嘗試的事件數量 執行約束選項,如設...