標籤:
Socket(通訊端)始於Unix,即人們所說的BSD Unix。socket家族有兩種:基於檔案系統的和基於網路的。第一種是基於檔案系統的,地址家族表示為:AF_UNIX(或AF_LOCAL);第二種是網路Socket,是基於網路的,地址家族表示為AF_INET(AF_INET6表示ipv6)。在Python 2.5 中加入了一種 Linux 通訊端的支援:AF_NETLINK(無串連[見下])通訊端家族讓使用者代碼與核心代碼之間的 IPC 可以使用標準 BSD 通訊端介面。Python 只支援 AF_UNIX,AF_NETLINK,和 AF_INET 家族。這裡將介紹使用最廣泛的一個:AF_INET。
根據通訊端類型,可以分為連線導向的和不需連線的。
連線導向的,在通訊之前需建立一條串連,這種通訊方式提供了順序的,可靠的,不會重複的資料轉送,而且也不會被加上資料邊界。實現這種串連的主要協議就是傳輸控制通訊協定(即 TCP),其對應的通訊端類型為 SOCK_STREAM。通訊端使用 網際網路通訊協定 (IP)(IP)來尋找網路中的主機,即TCP/IP協議來支援連線導向通訊端。
不需連線的,無需建立串連就可以進行通訊。實現這種串連的主要協議就是使用者資料包通訊協定(即 UDP) ,指定通訊端類型為 SOCK_DGRAM。通訊端使用 網際網路通訊協定 (IP)來尋找網路中的主機,即UDP/IP協議來支援無串連通訊端。
1. socket()模組函數
建立socket()通訊端的文法如下:
socket(socket_family, socket_type, protocol=0)
socket_family一般為AF_UNIX或者AF_INET,socket_type可以是SOCK_STREAM或者SOCK_DGRAM,protocol一般不填,預設為0。
由於socket模組中有太多的屬性,這裡使用"from socket import *"以減少代碼長度。
建立一個TCP/IP的通訊端:
tcpsocket = socket(AF_INET, SOCK_STREAM)
同樣的,建立一個UDP/IP的通訊端:
udpsocket = socket(AF_INET, SOCK_STREAM)
2. 通訊端對象(內建)方法
python中常用的通訊端對象函數如下:
3. 基於TCP的C/S模型
python網路編程基礎