(十六)Python中級知識-網絡編程(socket模塊)

1、概述

實現網絡編程我們需要藉助Socket模塊,Socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求,使主機間或者一臺計算機上的進程間可以通訊。

本文只實現了 單工狀態的例子。
單工:簡單的說就是一方只能發信息,另一方則只能收信息,通信是單向的。
關於半雙工和全雙工,本案例暫未試驗成功。
使用之前先導入模塊:

import socket

2、案例

我們需要創建一個服務端用於接收消息,創建一個客戶端用於發送消息。

創建服務端流程:創建socket對象=>綁定主機和端口(bind函數)=>監聽客戶端(accept函數)=>接收客戶端發送的信息(recv函數)=>關閉

創建服務端類ServerScoket.py:
import socket

# 創建 Socket 對象
serverScoket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 獲取主機名
host = socket.gethostname()
# 設置一個未被佔用的端口
port = 8888
# 綁定主機和端口號
serverScoket.bind((host, port))

# 設置最大連接數,超過後排隊
serverScoket.listen(10)

# 設置連接超時時間15秒
serverScoket.settimeout(15)

# accept() 方法返回兩個值(socket object, address info),用兩個參數來接收
returnScoket, addr = serverScoket.accept()

# 接收服務端響應的數據
recMsg = returnScoket.recv(1024)
print(recMsg.decode("utf-8"))

returnScoket.close()

創建客戶端類ClientSocket.py:

創建客戶端流程:創建socket對象=>連接服務端的主機和端口(connect函數)=>發送消息(send函數)=>關閉

import socket

# 創建 Socket 對象
clientScoket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 獲取主機名
host = socket.gethostname()
# 設置一個未被佔用的端口
port = 8888
# 綁定主機和端口號
clientScoket.connect((host, port))

# 設置連接超時時間15秒
clientScoket.settimeout(15)

clientScoket.send("你好!我來自客戶端\n".encode("utf-8"))

clientScoket.close()

輸出結果:

運行時需要先運行服務端,然後再啓動客戶端,由於客戶端是發送消息不接受消息,所以發送完之後程序退出,不再輸出,所以我們只關注服務端接收的消息。

你好!我來自客戶端

3、總結

注意.bind和.connect函數的參數需要通過元組傳遞對應的主機和端口信息。
socket用完之後需要關閉。
本文相對來說寫得比較簡單,算是對python3 socket有粗略的認識,其實關於實現半雙工和全雙工是實際生活中非常常用的,讀者可以自己翻閱一些資料來實現。

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