python之socket編程

Socket編程是計算機網絡編程的基礎,它允許兩臺計算機(或同一個計算機的不同進程)之間進行通信。Python 提供了 socket 模塊,可以很方便地進行 Socket 編程。下面是一些基本的 Socket 編程示例,包括 TCP 和 UDP。

TCP Socket 編程

TCP(傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。

服務器端
import socket# 創建一個 socket 對象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 綁定地址和端口
server_address = ('localhost', 65432)
server_socket.bind(server_address)# 開始監聽
server_socket.listen(5)
print('Server listening on', server_address)while True:# 等待連接print('Waiting for a connection...')connection, client_address = server_socket.accept()try:print('Connection from', client_address)# 接收數據while True:data = connection.recv(1024)if data:print('Received', repr(data))# 發送數據connection.sendall(data)else:breakfinally:# 清理連接connection.close()
客戶端
import socket# 創建一個 socket 對象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 連接到服務器
server_address = ('localhost', 65432)
client_socket.connect(server_address)try:# 發送數據message = 'This is the message. It will be echoed back.'print('Sending', repr(message))client_socket.sendall(message)# 接收數據amount_received = 0amount_expected = len(message)while amount_received < amount_expected:data = client_socket.recv(1024)amount_received += len(data)print('Received', repr(data))finally:# 清理連接client_socket.close()

UDP Socket 編程

UDP(用戶數據報協議)是一個簡單的面向數據報的傳輸層協議。它不保證數據包的順序、可靠性或完整性。

服務器端
import socket# 創建一個 socket 對象
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 綁定地址和端口
server_address = ('localhost', 10000)
sock.bind(server_address)print('Starting UDP server')while True:# 接收數據print('Waiting to receive message')data, address = sock.recvfrom(4096)  # 緩沖區大小是 4096 字節print('Received {} bytes from {}'.format(len(data), address))print('Data: {}'.format(data))if data:sent = sock.sendto(data, address)  # 將接收到的數據發送回去print('Sent {} bytes back to {}'.format(sent, address))
客戶端
import socket
import time# 創建一個 socket 對象
MESSAGE = 'This is the message.'
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 連接到服務器
server_address = ('localhost', 10000)try:# 發送數據print('Sending: {}'.format(MESSAGE))sent = sock.sendto(MESSAGE.encode(), server_address)# 接收響應time.sleep(1)  # 等待一秒以確保服務器有時間處理請求data, server = sock.recvfrom(4096)print('Received: {}'.format(data.decode()))finally:# 清理連接print('Closing socket')sock.close()

注意事項

  1. 異常處理:在實際應用中,應添加更多的異常處理,以確保程序的健壯性。
  2. 并發:對于多個客戶端連接,可以使用多線程或異步編程來處理。
  3. 資源管理:確保在程序結束時正確關閉所有的 socket 連接。

以上是一些基礎的 Python Socket 編程示例,希望對你有所幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70377.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70377.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker 的安全配置與優化(二)

Docker 安全優化策略 &#xff08;一&#xff09;多階段構建優化鏡像大小 多階段構建是 Docker 17.05 版本引入的強大功能&#xff0c;它允許在一個 Dockerfile 中定義多個構建階段&#xff0c;每個階段都可以使用不同的基礎鏡像和依賴項&#xff0c;最終只將必要的文件和依賴…

歐洲跨境組網專線:企業出海的高效網絡解決方案

在全球化的背景下&#xff0c;越來越多的企業將業務拓展至海外市場&#xff0c;并在歐洲等地設立分支機構。然而&#xff0c;跨境辦公中常常面臨公網網絡延遲高、打開速度慢、丟包嚴重等問題&#xff0c;這不僅影響辦公效率&#xff0c;還增加了IT維護的難度和成本。針對這一痛…

面陣工業相機提高餐飲業生產效率

餐飲行業是一個快節奏、高要求的領域&#xff0c;該領域對生產過程中每一個階段的效率和準確性都有很高的要求。在食品加工、包裝、質量控制和庫存管理等不同生產階段實現生產效率的優化是取得成功的關鍵步驟。面陣工業相機能夠一次性捕捉對象的二維區域圖像&#xff0c;并支持…

Renesas RH850 IAR編譯時變量分配特定內存

文章目錄 1. 核心作用2. 典型使用場景3. 示例代碼4. 編譯器與鏈接腳本協作5. 注意事項6. 調試驗證在RH850系列微控制器的開發中,#pragma location = "FIRST_RAM" 是一條編譯器指令,其核心含義是 將變量或函數分配到名為 FIRST_RAM 的特定內存段。以下是詳細解釋: …

C++面試題,進程和線程方面(1)

文章目錄 前言進程和線程有什么不同進程&#xff0c;線程的通訊方式什么是鎖為什么說鎖可以使線程安全加鎖有什么副作用總結 前言 這是個人總結進程和線程方面的面試題。如果有錯&#xff0c;歡迎佬們前來指導&#xff01;&#xff01;&#xff01; 進程和線程有什么不同 進程…

視頻mp4垂直拼接 水平拼接

視頻mp4垂直拼接 水平拼接 pinjie_v.py import imageio import numpy as np import os import cv2def pinjie_v(dir1,dir2,out_dir):os.makedirs(out_dir, exist_okTrue)# 獲取目錄下的所有視頻文件video_files_1 [f for f in os.listdir(dir1) if f.endswith(.mp4)]video_fi…

Unity攝像機與燈光相關知識

一、Inspector窗口 Inspector窗口可以查看和編輯對象的屬性以及設置 其中包含各種組件&#xff0c;例如用Cube對象來舉例 1.Sphere(Mesh)組件&#xff1a; 用來決定對象的網格屬性&#xff0c;例如球體網格為Sphere、立方體網格為Cube 2.Mesh Renderer組件&#xff1a; 用來設置…

C++(17):為optional類型構造對象

C++(17):optional,多了一個合理的選擇_c++17 max-CSDN博客 介紹了optional做為函數返回值的一種方式 其實optional也可以作為對象來使用 #include &

探索關鍵領域的AI工具:機器學習、深度學習、計算機視覺與自然語言處理

引言 在人工智能(AI)迅猛發展的今天&#xff0c;機器學習(ML)、深度學習(DL)、計算機視覺(CV)和自然語言處理(NLP)已經成為解決復雜問題的關鍵技術。無論是自動駕駛車輛的視覺識別&#xff0c;還是智能助手的對話理解&#xff0c;這些技術都在改變著世界。本文將介紹在各個領域…

基于vue和微信小程序的校園自助打印系統(springboot論文源碼調試講解)

第3章 系統設計 3.1系統功能結構設計 本系統的結構分為管理員和用戶、店長。本系統的功能結構圖如下圖3.1所示&#xff1a; 圖3.1系統功能結構圖 3.2數據庫設計 本系統為小程序類的預約平臺&#xff0c;所以對信息的安全和穩定要求非常高。為了解決本問題&#xff0c;采用前端…

Windows 快速搭建C++開發環境,安裝C++、CMake、QT、Visual Studio、Setup Factory

安裝C 簡介 Windows 版的 GCC 有三個選擇&#xff1a; CygwinMinGWmingw-w64 Cygwin、MinGW 和 mingw-w64 都是在 Windows 操作系統上運行的工具集&#xff0c;用于在 Windows 環境下進行開發和編譯。 Cygwin 是一個在 Windows 上運行的開源項目&#xff0c;旨在提供類Uni…

MKS SERVO42E57E 閉環步進電機_系列10 STM32_脈沖和串口例程

文章目錄 第1部分 產品介紹第2部分 相關資料下載2.1 MKS E系列閉環步進驅動資料2.2 源代碼下載2.3 上位機下載 第3部分 脈沖控制電機運行示例第4部分 讀取參數示例4.1 讀取電機實時位置4.2 讀取電機實時轉速4.3 讀取電機輸入脈沖數4.4 讀取電機位置誤差4.5 讀取電機IO端口狀態 …

【宏基因組】MaAsLin2

教學手冊&#xff1a;學習手冊 MaAsLin2 # BiocManager::install("Maaslin2",force TRUE)library(Maaslin2) # 用的是相對豐度&#xff0c;行名為-ID行樣本,列為細菌 input_data system.file("extdata", "HMP2_taxonomy.tsv", package"…

【消息隊列】認識項目

1. 項目介紹 該項目是去實現一個簡單的消息隊列&#xff0c;包含服務器&#xff0c;客戶端的實現&#xff0c;客戶端通過遠程方法調用與服務器進行交互。采用自定義應用層協議&#xff0c;下層使用 TCP 協議進行數據在網絡中傳輸&#xff0c;核心功能提供了虛擬主機&#xff0…

vue從入門到精通(十一):條件渲染

條件渲染 1.v-if 寫法: (1).v-if“表達式” (2).v-else-if“表達式” (3).v-else“表達式” 適用于:切換頻率較低的場景。 特點:不展示的DOM元素直接被移除。 注意:v-if可以和:v-else-if、v-else一起使用&#xff0c;但要求結構不能被“打斷” 2.v-show 寫法:v-show“…

Python爬蟲基礎文件操作

文件操作 引言 爬蟲爬取的一切內容都是在內存進行的&#xff0c;這樣會有什么問題嗎&#xff1f;如果一旦短電或著發生意外電腦關機了那么你的工作成果將瞬間消失。所以&#xff0c;我們還缺少數據在本地文件系統進行持久化的能力&#xff0c;簡單的來說就是文件讀寫操作。文…

OpenCV中的邊緣檢測

邊緣檢測是圖像處理和計算機視覺中的關鍵技術之一&#xff0c;旨在識別圖像中像素強度發生顯著變化的區域&#xff0c;這些區域通常對應于物體的邊界或輪廓。邊緣檢測在機器視覺中具有重要的需求背景&#xff0c;主要體現在以下幾個方面&#xff1a; 圖像分割&#xff1a;邊緣…

【簡歷優化】性能調優 — 編程性能調優篇

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一個正在變禿、變強的文藝傾年。 &#x1f514;本文講解【簡歷優化】性能調優 — 編程性能調優篇&#xff0c;期待與你一同探索、學習、進步&#xff0c;一起卷起來叭&#xff01; 目錄 一、編程性能調優字符串String 發展優…

深入理解 MySQL 8 C++ 源碼:SELECT MOD(MONTH(NOW()), 2) 的函數執行過程

MySQL 作為最流行的關系型數據庫之一&#xff0c;其內部實現機制一直是開發者探索的熱點。本文將以一條簡單的 SQL 查詢 SELECT MOD(MONTH(NOW()), 2) 為例&#xff0c;深入分析 MySQL 8 源碼中內置函數 MOD、MONTH 和 NOW 的執行過程&#xff0c;揭示其底層實現邏輯。 一、SQL…

RNN中遠距離時間步梯度消失問題及解決辦法

RNN中遠距離時間步梯度消失問題及解決辦法 RNN 遠距離時間步梯度消失問題LSTM如何解決遠距離時間步梯度消失問題 RNN 遠距離時間步梯度消失問題 經典的RNN結構如下圖所示&#xff1a; 假設我們的時間序列只有三段&#xff0c; S 0 S_{0} S0? 為給定值&#xff0c;神經元沒有…