Python3資料網絡編程解析

Python JSON BSD XML 通信 操作系統 電腦 AI上程序員 2019-06-18

Python 提供了兩個級別訪問的網絡服務。:

  • 低級別的網絡服務支持基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層操作系統Socket接口的全部方法。
  • 高級別的網絡服務模塊 SocketServer, 它提供了服務器中心類,可以簡化網絡服務器的開發。

什麼是 Socket?思考:socket是什麼?

答:網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。通俗的講,Socket非常類似於電話插座。以一個國家級電話網為例,電話的通話雙方相當於相互通信的2個進程,區號是它的網絡地址;區內一個單位的交換機相當於一臺主機,主機分配給每個用戶的局內號碼相當於Socket號。雙方通話的過程,是一方向電話機發出信號和對方從電話機接收信號的過程,相當於向Socket發送數據和從socket接收數據。通話結束後,一方掛起電話機相當於關閉Socket,撤消連接。

Python3資料網絡編程解析

思考:socket和http有啥區別?

答:HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力,是http的基礎核心,Json/xml,可以說是車上裝載的貨物。

Socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求,使主機間或者一臺計算機上的進程間可以通訊。


socket()函數

Python 中,我們用 socket()函數來創建套接字,語法格式如下:


socket.socket([family[, type[, proto]]])

參數

  • family: 套接字家族可以使AF_UNIX或者AF_INET
  • type: 套接字類型可以根據是面向連接的還是非連接分為SOCK_STREAM或SOCK_DGRAM
  • protocol: 一般不填默認為0.

Socket 對象(內建)方法


Python3資料網絡編程解析



Python3資料網絡編程解析



簡單實例

服務端

我們使用 socket 模塊的 socket 函數來創建一個 socket 對象。socket 對象可以通過調用其他函數來設置一個 socket 服務。

現在我們可以通過調用 bind(hostname, port) 函數來指定服務的 port(端口)

接著,我們調用 socket 對象的 accept 方法。該方法等待客戶端的連接,並返回 connection 對象,表示已連接到客戶端。

完整代碼如下:


#!/usr/bin/python3
# 文件名:server.py
# 導入 socket、sys 模塊
import socket
import sys
# 創建 socket 對象
serversocket = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
# 獲取本地主機名
host = socket.gethostname()
port = 9999
# 綁定端口號
serversocket.bind((host, port))
# 設置最大連接數,超過後排隊
serversocket.listen(5)while True:
# 建立客戶端連接
clientsocket,addr = serversocket.accept()
print("連接地址: %s" % str(addr))

msg='歡迎訪問菜鳥教程!'+ "\r\n"
clientsocket.send(msg.encode('utf-8'))
clientsocket.close()

客戶端

接下來我們寫一個簡單的客戶端實例連接到以上創建的服務。端口號為 9999。

socket.connect(hosname, port ) 方法打開一個 TCP 連接到主機為 hostname 端口為 port 的服務商。連接後我們就可以從服務端獲取數據,記住,操作完成後需要關閉連接。

完整代碼如下:


#!/usr/bin/python3
# 文件名:client.py
# 導入 socket、sys 模塊
import socket
import sys
# 創建 socket 對象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 獲取本地主機名
host = socket.gethostname()
# 設置端口號
port = 9999
# 連接服務,指定主機和端口
s.connect((host, port))
# 接收小於 1024 字節的數據
msg = s.recv(1024)
s.close()
print (msg.decode('utf-8'))

現在我們打開兩個終端,第一個終端執行 server.py 文件:


$ python3 server.py

第二個終端執行 client.py 文件:


$ python3 client.py 
歡迎訪問菜鳥教程!

這時我們再打開第一個終端,就會看到有以下信息輸出:


連接地址: ('192.168.0.118', 33397)

Python Internet 模塊

以下列出了 Python 網絡編程的一些重要模塊


Python3資料網絡編程解析



相關推薦

推薦中...