一、概述
Python 提供了兩個級別訪問的網路服務。
- 低階別的網路服務支援基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層作業系統Socket介面的全部方法。
- 高階別的網路服務模組 SocketServer, 它提供了伺服器中心類,可以簡化網路伺服器的開發
二、引數
- family: 套接字家族可以使AF_UNIX或者AF_INET
- type: 套接字型別可以根據是面向連線的還是非連線分為
SOCK_STREAM
或SOCK_DGRAM
- protocol: 一般不填預設為0.
三、服務端
我們使用 socket 模組的 socket 函式來建立一個 socket 物件。socket 物件可以通過呼叫其他函式來設定一個 socket 服務。
現在我們可以通過呼叫 bind(hostname, port) 函式來指定服務的 port(埠)。
接著,我們呼叫 socket 物件的 accept 方法。該方法等待客戶端的連線,並返回 connection 物件,表示已連線到客戶端。
完整程式碼如下:
1 # coding=utf-8 2 # 檔名:server.py 3 4 import socket # 匯入 socket 模組 5 6 s = socket.socket() # 建立 socket 物件 7 host = socket.gethostname() # 獲取本地主機名 8 port = 12345 # 設定埠 9 s.bind((host, port)) # 繫結埠 10 11 s.listen(5) # 等待客戶端連線 12 while True: 13 c, addr = s.accept() # 建立客戶端連線。 14 print 'address:', addr 15 c.send('welcome to!') 16 c.close() # 關閉連線
四、客戶端
接下來我們寫一個簡單的客戶端例項連線到以上建立的服務。埠號為 12345。
socket.connect(hosname, port ) 方法開啟一個 TCP 連線到主機為 hostname 埠為 port 的服務商。連線後我們就可以從服務端後期資料,記住,操作完成後需要關閉連線。
完整程式碼如下:
1 # coding=utf-8 2 # 檔名:client.py 3 4 import socket # 匯入 socket 模組 5 6 s = socket.socket() # 建立 socket 物件 7 host = socket.gethostname() # 獲取本地主機名 8 port = 12345 # 設定埠好 9 10 s.connect((host, port)) 11 print host 12 print socket.gethostbyaddr(host) 13 print socket.SocketType 14 print s.recv(1024) 15 s.close()
五、Python Internet 模組
以下列出了 Python 網路程式設計的一些重要模組:
協議 | 功能用處 | 埠號 | Python 模組 |
---|---|---|---|
HTTP | 網頁訪問 | 80 | httplib, urllib, xmlrpclib |
NNTP | 閱讀和張貼新聞文章,俗稱為"帖子" | 119 | nntplib |
FTP | 檔案傳輸 | 20 | ftplib, urllib |
SMTP | 傳送郵件 | 25 | smtplib |
POP3 | 接收郵件 | 110 | poplib |
IMAP4 | 獲取郵件 | 143 | imaplib |
Telnet | 命令列 | 23 | telnetlib |
Gopher | 資訊查詢 | 70 | gopherlib, urllib |