網絡編程/web編程/套接字

概念: 服務器是一個軟件或硬件,用於提供客戶需要的“服務”。服務器存在的唯一目的就是等待客戶的請求,給這些客戶服務,然後再等待其它的請求。

分類:

硬件客戶/服務器架構:打印機、文件服務器;

軟件客戶/服務器架構:Web 服務器 、數據庫服務器、窗口服務器 (x服務器)等。

套接字:通訊端點

套接字地址:主機與端口,合法的端口號範圍爲 0 到 65535。其中,小於 1024 的端口號爲系統保留端口。

一開始,套接字被設計用在同一臺主機上多個應用程序之間的通訊。這也被稱進程間通信IPC(Inter Process Communication

套接字有兩種:基於文件型,其“家族名”爲 AF_UNIX,表示“地址家族:UNIX”;

和基於網絡型,它有自己的家族名字:AF_INET,或叫“地址家族:Internet”。

  Python 只支持 AF_UNIX,AF_NETLINK,和 AF_INET 家族。網絡編程只用 AF_INET。

   無論哪一種地址家族,套接字的類型只有兩種:面向連接的套接字, 無連接套接字

面向連接的套接字,即在通訊之前一定要建立一條連接,這種通訊方式也被稱爲“虛電路”或“流套接字”。面向連接的通訊方式提供了順序的,可靠的,不會重複的數據傳輸,而且也不會被加上數據邊界。實現這種連接的主要協議就是傳輸控制協議(即 TCP) 。

無連接套接字,無需建立連接就可以進行通訊,實現這種連接的主要協議就是用戶數據報協議(即 UDP)。


 套接字對象的常用函數
 函數                      描述
服務器端套接字函數
s.bind()           綁定地址(主機,端口號對)到套接字
s.listen()        開始 TCP 監聽
s.accept()        被動接受 TCP 客戶的連接, (阻塞式)等待連接的到來
客戶端套接字函數
s.connect()       主動初始化 TCP 服務器連接
s.connect_ex()    connect()函數的擴展版本,出錯時返回出錯碼,而不是拋異常
公共用途的套接字函數
s.recv()          接收 TCP 數據
s.send()         發送 TCP 數據
s.sendall()      完整發送 TCP 數據
s.recvfrom()    接收 UDP 數據
s.sendto()       發送 UDP 數據
s.getpeername() 連接到當前套接字的遠端的地址
s.getsockname() 當前套接字的地址
s.getsockopt() 返回指定套接字的參數
s.setsockopt() 設置指定套接字的參數
s.close()       關閉套接字

  可以這樣區分“因特網編程”和“Web 編程” ,後者僅包括針對 Web 的應用程序開發,也就是說Web 客戶端和服務器是本章的焦點。

  高級 Web 客戶端的一個例子就是網絡爬蟲(aka 蜘蛛和機器人)。這些程序可以基於不同目的在因特網上探索和下載頁面

URL 格式: prot_sch://net_loc/path;params?query#frag

URL 部件      描述
prot_sch    網絡協議或者下載規劃
net_loc     服務器位置(或許也有用戶信息)
path        斜槓( / )限定文件或者 CGI 應用程序的路徑。
Params      可選參數
query       連接符( & )連接鍵值對

frag        拆分文檔中的特殊錨

 如今的 Web 服務器典型的部件有 Aphache,Java(Tomcat),PHP 和各種 Perl 模塊,Python 模塊和集成的數據庫部件(MySQL 或者 PostgreSQL),以及 SSL/security。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章