Python網絡編程入門

一.Socket

簡稱套接字,是進程之間通信的一個工具,好比現實生活中的插座,所有的家用電器要想工作都是基于插座進行,進程之間要想進行網絡通信需要Socket,Socket好比數據的搬運工~

2個進程之間通過Socket進行相互通訊,就必須有服務端和客戶端。

  • 服務端:等待其他進程的連接,可接受發來的消息、可以回復消息~
  • 客戶端: 主動連接服務端,可以發送消息,可以接受回復~

一個服務端可以接受多個客戶端發來的消息,如下圖:

?

二.服務端開發

1.導入socket包

2.創建一個Socket對象

socket_server = socket.socket()

3.綁定IP地址和端口

socket_server.bind(('localhost', 1319))

端口號自定義,但別和nodejs、Jupyter、MySQL或者Tomcat這些重合了就行~?

4.監聽端口

socket_server.listen(1)

函數內參數設置為1,表示同時最多接受1個客戶端的連接。?

5.等待客戶端連接

這里使用accept方法,這是一個阻塞方法:如果沒有連接,則后續的代碼皆不執行~

conn, addr = socket_server.accept()

accept返回的是一個二元元組:

  • conn:客戶端和服務端的連接對象
  • address:客戶端的地址信息

測試連接情況:

print(f"Connected by: {addr}")

6.接受客戶端信息

data:str = conn.recv(1024).decode('utf-8')
#類型注釋,字符串型

recv接受的參數是緩沖區大小,這里一般給1024即可。此外其返回值為一個字節數組也即bytes對象,需要decode方法通過UTF-8編碼,將字節數組轉換為字符串對象~

print(f"message:{data}")

7.回復消息

msg=input("回復消息:").encode('utf-8')
conn.send(msg)

?input鍵入的是字符串對象,因此需要先編碼為字節數組~

8.關閉鏈接

conn.close()
socket_server.close()

三.客戶端開發

總的來說異曲同工,甚至更為簡易:

import socket
socket_client= socket.socket()
socket_client.connect(('127.0.0.1', 1325))  #就是localhost,別猶豫
socket_client.send(bytes('Hello, client!', 'utf-8'))
recv_data=socket_client.recv(1024)
print(f"回復的消息是:{recv_data.decode('utf-8')}")
socket_client.close()

四.測試

將兩個py文件都運行起來:

服務端已經收到了客戶端發來的消息了,這時我們回復以后,客戶端亦可正常收到~

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

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

相關文章

人工智能(AI)系統化學習路線

一、為什么需要系統化學習AI? 人工智能技術正在重塑各行各業,但許多初學者容易陷入誤區: ? 盲目跟風:直接學習TensorFlow/PyTorch,忽視數學與算法基礎。 ? 紙上談兵:只看理論不寫代碼,無法解…

mac calDAV 日歷交互

安裝Bakal docker https://sabre.io/dav/building-a-caldav-client/ 在Bakal服務器上注冊賬戶 http://localhost:8080/admin/?/users/calendars/user/1/ 在日歷端登錄賬戶: Server: http://127.0.0.1:8080/dav.php Server Path: /dav.php/principals/lion No e…

手機號登錄與高并發思考

基礎邏輯 一般來說這個驗證碼登錄分為手機號、以及郵箱登錄 手機號短信驗證,以騰訊云SMS 服務為例: 這個操作無非對后端來說就是兩個接口: 一個是獲取驗證碼,這塊后端生成6位數字expire_time 去推送到騰訊云sdk ,騰…

Python設計模式 - 適配器模式

定義 適配器模式(Adapter Pattern)是一種結構型設計模式,它用于將一個類的接口轉換為客戶端所期待的另一個接口。 注:在適配器模式定義中所提及的接口是指廣義的接口,它可以表示一個方法或者一組方法的集合。 結構 …

【前端工程化】

目錄 前端工程戶核心技術之模塊化前端模塊化的進化過程commonjs規范介紹commonjs規范示例commonjs模塊打包 amd規范、cmd規范前端工程化關鍵技術之npmwebpack原理 前端工程戶核心技術之模塊化 前端模塊化是一種標準,不是實現。commonjs是前端模塊化的標準&#xff…

關于CNN,RNN,GAN,GNN,DQN,Transformer,LSTM,DBN你了解多少

以下是神經網絡中常見的幾種模型的簡要介紹: 1. ?CNN (Convolutional Neural Network, 卷積神經網絡) ?用途: 主要用于圖像處理和計算機視覺任務。?特點: 通過卷積核提取局部特征,具有平移不變性,能夠有效處理高維數據(如圖像…

T113-i開發板的休眠與RTC定時喚醒指南

??在嵌入式系統設計中,休眠與喚醒技術是優化電源管理、延長設備續航的關鍵。飛凌嵌入式基于全志T113-i處理器開發設計的OK113i-S開發板提供了兩種休眠模式:freeze和mem,以滿足不同應用場景下的功耗與恢復速度需求。本文將詳細介紹如何讓OK1…

SpringBoot項目實戰(初級)

目錄 一、數據庫搭建 二、代碼開發 1.pom.xml 2.thymeleaf模塊處理的配置類 3.application配置文件 4.配置(在啟動類中) 5.編寫數據層 ②編寫dao層 ③編寫service層 接口 實現類 注意 補充(注入的3個注解) 1.AutoWir…

高性能網絡SIG雙月動態:加速 SMC eBPF 透明替換特性上游化進程,并與上游深度研討新特性

01、整體進展 本次雙月報總結了 SIG 在 1 月和 2 月的工作進展,工作聚焦在 ANCK CVE 和穩定性問題修復,以及上游 SMC eBPF 透明替換特性推進和多個話題討論上。 本月關鍵進展: 1. 推進 SMC eBPF 透明替換特性上游化,更新至 V7&…

某視頻的解密下載

下面講一下怎么爬取視頻,這個還是比小白的稍微有一點繞的 首先打開網址:aHR0cDovL3d3dy5wZWFydmlkZW8uY29tL3BvcHVsYXJfNA 首頁 看一下: 有一個標題和一個href,href只是一個片段,待會肯定要拼接, 先找一…

C++繼承機制:從基礎到避坑詳細解說

目錄 1.繼承的概念及定義 1.1繼承的概念 1.2 繼承定義 1.2.1定義格式 1.2.2繼承關系和訪問限定符 1.2.3繼承基類成員訪問方式的變化 總結: 2.基類和派生類對象賦值轉換 3.繼承中的作用域 4.派生類的默認成員函數 ?編輯 默認構造與傳參構造 拷貝構造&am…

測試基礎入門

文章目錄 軟件測試基礎1.1軟件測試概述什么是軟件測試什么是軟件需求說明書軟件測試的原則測試用例的設計測試用例設計的基本原則軟件測試分類軟件缺陷的定義 2.1軟件開發模型軟件開發模型概述大爆炸模型(邊寫邊改)軟件開發生命周期模型--螺旋模型軟件開…

022-spdlog

spdlog 以下是從原理到代碼實現的全方位spdlog技術調研結果,結合核心架構、優化策略和完整代碼示例: 一、核心架構設計原理 spdlog三級架構 (圖示說明:spdlog采用三級結構實現日志系統解耦) Registry管理中樞 全局…

STM32時鐘樹

時鐘樹 時鐘樹就是STM32中用來產生和配置時鐘,并且把配置好的時鐘發送到各個外設的系統,時鐘是所有外設運行的基礎,所以時鐘也是最先需要配置的東西,在程序中主函數之前還會執行一個SystemClock_Config()函數,這個函數…

【第22節】windows網絡編程模型(WSAAsyncSelect模型)

目錄 引言 一、WSAAsyncSelect模型概述 二、WSAAsyncSelect模型流程 2.1 自定義消息 2.2 創建窗口例程 2.3 初始化套接字 2.4 注冊網絡事件 2.5 綁定和監聽 2.6 消息循環 三、完整示例代碼 引言 在網絡編程的廣袤天地中,高效處理網絡事件是構建穩定應用的…

利用Dify編制用戶問題意圖識別和規范化回復

繼上一篇文章,成功完成Dify本地部署后,主要做了一些workflow和Agent的應用實現,整體感覺dify在工作流可視化編排方面非常好,即使部分功能無法實現,也可以通過代碼執行模塊或者自定義工具來實現(后續再具體分…

雙核鎖步技術在汽車芯片軟錯誤防護中的應用詳解

摘要 本文深入探討了雙核鎖步技術在保障汽車芯片安全性中的應用。文章首先分析了國產車規芯片在高安全可靠領域面臨的軟錯誤難點及攻克方向,然后詳細介紹了雙核鎖步技術的基本原理及其在汽車芯片防軟錯誤的重要性。通過對比國內外多家廠商的芯片技術,分析…

Lustre 語言的 Rust 生成相關的工作

目前 Lustre V6 編譯器支持編譯生成的語言為C語言。但也注意到,以 Rust 語言為生成目標語言,也存在若干相關工作。 rustre(elegaanz) 該項工作為 Lustre v6 語言的解析器,使用 Rust 語言實現。生成 Lustre AST。 項…

Java 之「單調棧」:從入門到實戰

Java 單調棧:從入門到實戰 文章目錄 Java 單調棧:從入門到實戰引言什么是單調棧?單調遞增棧單調遞減棧 單調棧的應用場景Java 實現單調棧代碼示例:下一個更大元素代碼解析 單調棧的優勢實戰應用:股票價格跨度代碼示例代…

【Golang】defer與recover的組合使用

在Go語言中,defer和recover是兩個關鍵特性,通常結合使用以處理資源管理和異常恢復。以下是它們的核心應用場景及使用示例: 1. defer 的應用場景 defer用于延遲執行函數調用,確保在函數退出前執行特定操作。主要用途包括&#xff…