Python實現(xiàn)常見網(wǎng)絡(luò)通信的示例詳解
一、HTTP/HTTPS 通信
1. 客戶端示例(requests 庫)
import requests # HTTP GET response = requests.get('http://httpbin.org/get') print(response.text) # HTTPS POST response = requests.post( 'https://httpbin.org/post', data={'key': 'value'}, verify=True # 驗證 SSL 證書(默認(rèn)) ) print(response.json())
2. 服務(wù)端示例(Flask)
from flask import Flask, request app = Flask(__name__) @app.route('/api', methods=['GET', 'POST']) def handle_request(): if request.method == 'GET': return {'message': 'GET received'} elif request.method == 'POST': return {'data': request.json} if __name__ == '__main__': app.run(ssl_context='adhoc') # 啟用 HTTPS
二、UDP 通信
1. 服務(wù)端
import socket server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server.bind(('0.0.0.0', 9999)) while True: data, addr = server.recvfrom(1024) print(f"Received from {addr}: {data.decode()}") server.sendto(b'UDP response', addr)
2. 客戶端
import socket client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) client.sendto(b'Hello UDP', ('localhost', 9999)) response, addr = client.recvfrom(1024) print(f"Received: {response.decode()}")
三、WebSocket 通信
需要安裝庫:pip install websockets
1. 服務(wù)端
import asyncio import websockets async def handler(websocket): async for message in websocket: print(f"Received: {message}") await websocket.send(f"Echo: {message}") async def main(): async with websockets.serve(handler, "localhost", 8765): await asyncio.Future() # 永久運(yùn)行 asyncio.run(main())
2. 客戶端
import asyncio import websockets async def client(): async with websockets.connect("ws://localhost:8765") as ws: await ws.send("Hello WebSocket!") response = await ws.recv() print(f"Received: {response}") asyncio.run(client())
四、Server-Sent Events (SSE)
需要安裝庫:pip install sseclient-py
1. 服務(wù)端(Flask 實現(xiàn))
from flask import Flask, Response app = Flask(__name__) @app.route('/stream') def stream(): def event_stream(): for i in range(5): yield f"data: Message {i}\n\n" return Response(event_stream(), mimetype="text/event-stream") if __name__ == '__main__': app.run()
2. 客戶端
import requests from sseclient import SSEClient url = 'http://localhost:5000/stream' response = requests.get(url, stream=True) client = SSEClient(response) for event in client.events(): print(f"Received event: {event.data}")
關(guān)鍵點(diǎn)說明
- HTTP/HTTPS:最常用的請求-響應(yīng)模型
- UDP:無連接協(xié)議,適合實時性要求高的場景
- WebSocket:全雙工通信協(xié)議,適合實時雙向通信
- SSE:服務(wù)器到客戶端的單向推送技術(shù)
- 安全建議:
- HTTPS 使用 requests 的
verify=True
驗證證書 - WebSocket 使用
wss://
安全協(xié)議 - 生產(chǎn)環(huán)境應(yīng)使用正式 SSL 證書
- HTTPS 使用 requests 的
根據(jù)具體需求選擇協(xié)議:
- 簡單數(shù)據(jù)請求:HTTP/HTTPS
- 實時游戲/視頻:UDP
- 聊天應(yīng)用:WebSocket
- 實時通知:SSE
建議根據(jù)實際場景配合使用異步框架(如 aiohttp、FastAPI)以獲得更好的性能。
到此這篇關(guān)于Python實現(xiàn)常見網(wǎng)絡(luò)通信的示例詳解的文章就介紹到這了,更多相關(guān)Python網(wǎng)絡(luò)通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析Python 中的 WSGI 接口和 WSGI 服務(wù)的運(yùn)行
這篇文章主要介紹了Python 中的 WSGI 接口和 WSGI 服務(wù)的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12python opencv 圖像邊框(填充)添加及圖像混合的實現(xiàn)方法(末尾實現(xiàn)類似幻燈片漸變的效果)
這篇文章主要介紹了python opencv 圖像邊框(填充)添加及圖像混合(末尾實現(xiàn)類似幻燈片漸變的效果),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03pyMySQL SQL語句傳參問題,單個參數(shù)或多個參數(shù)說明
這篇文章主要介紹了pyMySQL SQL語句傳參問題,單個參數(shù)或多個參數(shù)說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06PyQt5基本控件使用詳解:單選按鈕、復(fù)選框、下拉框
這篇文章主要介紹了PyQt5基本控件使用:單選按鈕、復(fù)選框、下拉框,本文中的內(nèi)容和實例也基本回答了開篇提到的問題。需要的朋友可以參考下2019-08-08Python操作MySQL數(shù)據(jù)庫的簡單步驟分享
這篇文章主要給大家介紹了關(guān)于Python操作MySQL數(shù)據(jù)庫的簡單步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Python入門教程(四十一)Python的NumPy數(shù)組索引
這篇文章主要介紹了Python入門教程(四十一)Python的NumPy數(shù)組索引,數(shù)組索引是指使用方括號([])來索引數(shù)組值,numpy提供了比常規(guī)的python序列更多的索引工具,除了按整數(shù)和切片索引之外,數(shù)組可以由整數(shù)數(shù)組索引、布爾索引及花式索引,需要的朋友可以參考下2023-05-05