本文著重討論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包括許多選項,它們大致分為四大類 基本配置選項,如設定嘗試的事件數量 執行約束選項,如設...