【計算機網絡】Socket

Socket 是網絡通信的核心技術之一,充當應用程序與網絡協議棧之間的接口。

1. Socket 定義

Socket(套接字)是操作系統提供的 網絡通信抽象層,允許應用程序通過標準接口(如 TCP/IP 或 UDP)進行數據傳輸。它本質上是 IP地址 + 端口號 的組合,用于標識網絡中的唯一通信端點。

2. Socket 類型

根據協議和通信模式,Socket 主要分為三類:

類型協議特點
流式 Socket (SOCK_STREAM)TCP面向連接、可靠傳輸、數據按順序到達,適合文件傳輸、網頁瀏覽等場景。
數據報 Socket (SOCK_DGRAM)UDP無連接、不可靠傳輸、數據可能亂序或丟失,適合實時視頻、在線游戲等場景。
原始 Socket (SOCK_RAW)底層協議直接操作IP層數據包,用于自定義協議或網絡探測(如 Ping、路由跟蹤)。

3. Socket 通信流程

服務器端流程:

  • 創建 Socket:socket()
    • 初始化一個 Socket 對象,指定協議族(如 IPv4)和類型(如 TCP)。
  • 綁定地址:bind()
    • 將 Socket 與 IP 地址和端口綁定(如 0.0.0.0:8080)。
  • 監聽連接:listen()
    • 進入監聽狀態,等待客戶端連接。
  • 接受連接:accept()
    • 接受客戶端連接請求,返回一個新的 Socket 用于與客戶端通信。
  • 數據傳輸:send()/recv()
    • 通過新 Socket 與客戶端收發數據。
  • 關閉連接:close()
    • 通信完成后關閉 Socket。

客戶端流程:

  • 創建 Socket:socket()
  • 發起連接:connect()
    • 向服務器地址(如 192.168.1.100:8080)發起連接請求。
  • 數據傳輸:send()/recv()
  • 關閉連接:close()

4. Socket 編程模型

  • 阻塞模式:默認模式,函數調用(如 recv())會阻塞線程直到操作完成。
  • 非阻塞模式:函數立即返回,需輪詢或結合多路復用技術(如 select、epoll)檢查狀態。
  • 多路復用技術:高效管理多個 Socket 連接,常見方法:
    • select():跨平臺但性能一般。
    • epoll()(Linux):高性能,支持水平觸發(LT)和邊緣觸發(ET)。
    • kqueue()(BSD/macOS):類似 epoll。
    • IOCP(Windows):基于完成端口的異步模型。

5. 關鍵概念

  • 地址結構:如 sockaddr_in(IPv4)或 sockaddr_in6(IPv6),包含 IP 和端口信息。
  • 字節序轉換:
    • 使用 htonl()、htons() 等函數將主機字節序轉為網絡字節序(大端序)。
  • 超時設置:通過 setsockopt() 設置 SO_RCVTIMEO 或 SO_SNDTIMEO 控制收發超時。

6. 跨平臺差異

  • Linux/Unix:遵循 POSIX 標準,頭文件 <sys/socket.h>。
  • Windows:使用 Winsock API,需包含 <winsock2.h> 并初始化 WSA(WSAStartup())。

7. 應用場景

  • 即時通訊軟件:如QQ、微信等,依賴于TCP或UDP Socket實現客戶端與服務器之間的消息實時傳輸。
  • 在線游戲:快速傳輸玩家動作數據(UDP 常見)。
  • 文件傳輸協議:如FTP,通過TCP Socket實現文件的上傳、下載和管理。
  • 物聯網設備:傳感器數據上報與控制指令下發。
  • 遠程登錄協議:如SSH,通過TCP Socket與遠程服務器建立連接,實現遠程命令執行。

8. 代碼示例(Python)

TCP 服務器:

import socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 8080))
server.listen()
client, addr = server.accept()
print(f"Connected by {addr}")
client.send(b"Hello from server!")
client.close()

TCP 客戶端:

import socketclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8080))
data = client.recv(1024)
print(f"Received: {data.decode()}")
client.close()

9. 注意事項

  • 錯誤處理:檢查所有 Socket API 的返回值,處理異常(如連接拒絕、超時)。
  • 資源釋放:確保關閉所有 Socket,避免資源泄漏。
  • 并發處理:多線程、異步IO 或協程(如 asyncio)應對高并發。
  • 安全性:使用 TLS/SSL 加密數據(如 SSLSocket),防范注入攻擊。

10. 總結

Socket 是網絡編程的基石,理解其原理和實現有助于開發高性能、可靠的網絡應用。盡管現代框架(如 HTTP 庫、gRPC)封裝了底層細節,但在需要精細控制網絡行為(如自定義協議、低延遲優化)時,直接操作 Socket 仍是必備技能。

11. 資料

  • 【B站】socket到底是什么?

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

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

相關文章

Apache XTable:在數據湖倉一體中推進數據互作性

Apache XTable 通過以多種開放表格式提供對數據的訪問&#xff0c;在增強互作性方面邁出了一大步。移動數據很困難&#xff0c;在過去&#xff0c;這意味著在為數據湖倉一體選擇開放表格式時&#xff0c;您被鎖定在該選擇中。一個令人興奮的項目當在數據堆棧的這一層引入互作性…

anolis8.9-k8s1.32-node-二進制部署

一、系統 # cat /etc/anolis-release Anolis OS release 8.9 # uname -r 5.10.134-18.an8.x86_64 二、從master上拷貝dockers及cri-docker相關文件 # groupadd docker # mkdir /etc/docker# scp -P 4033 root192.168.7.201:/etc/systemd/system/containerd.service /etc/s…

《AJAX:前端異步交互的魔法指南》

什么是AJAX AJAX&#xff08;Asynchronous JavaScript and XML&#xff0c;異步 JavaScript 和 XML&#xff09; 是一種用于創建異步網頁應用的技術&#xff0c;允許網頁在不重新加載整個頁面的情況下&#xff0c;與服務器交換數據并局部更新頁面內容。盡管名稱中包含 XML&…

Python 性能優化:從入門到精通的實用指南

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

利用 requestrepo 工具驗證 XML外部實體注入漏洞

1. 前言 在數字化浪潮席卷的當下&#xff0c;網絡安全的重要性愈發凸顯。應用程序在便捷生活與工作的同時&#xff0c;也可能暗藏安全風險。XXE&#xff08;XML外部實體&#xff09;漏洞作為其中的典型代表&#xff0c;攻擊者一旦利用它&#xff0c;便能竊取敏感信息、掌控服務…

FreeRTOS第17篇:FreeRTOS鏈表實現細節05_MiniListItem_t:FreeRTOS內存優化

文/指尖動聽知識庫-星愿 文章為付費內容,商業行為,禁止私自轉載及抄襲,違者必究!!! 文章專欄:深入FreeRTOS內核:從原理到實戰的嵌入式開發指南 1 為什么需要迷你列表項? 在嵌入式系統中,內存資源極其寶貴。FreeRTOS為滿足不同場景需求,設計了標準列表項(ListItem_…

Spring 無法解決循環依賴的 5 種場景

一、構造器注入引發的循環依賴 1. 問題復現 Component public class ServiceA {private final ServiceB serviceB;Autowiredpublic ServiceA(ServiceB serviceB) { // 構造器注入this.serviceB serviceB;} }Component public class ServiceB {private final ServiceA servic…

Core Vision Kit(基礎視覺服務)

文章目錄 一、Core Vision Kit簡介場景介紹約束與限制二、通用文字識別三、人臉檢測一、Core Vision Kit簡介 Core Vision Kit(基礎視覺服務)是機器視覺相關的基礎能力,例如通用文字識別(即OCR,Optical Character Recognition,也稱為光學字符識別)、人臉檢測、人臉比對…

第TR3周:Pytorch復現Transformer

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客 &#x1f356; 原作者&#xff1a;K同學啊 Transformer通過自注意力機制&#xff0c;改變了序列建模的方式&#xff0c;成為AI領域的基礎架構 編碼器&#xff1a;理解輸入&#xff0c;提取上下文特征…

FreeRTOS 任務間通信機制:隊列、信號量、事件標志組詳解與實驗

1. FreeRTOS 消息隊列 1.1 簡介 ? 隊列是 任務間通信的主要形式&#xff0c;可用于在任務之間以及中斷與任務之間傳遞消息。隊列在 FreeRTOS 中具有以下關鍵特點&#xff1a; 隊列默認采用 先進先出 FIFO 方式&#xff0c;也可以使用 xQueueSendToFront()實現 LIFO。FreeRT…

【虛擬化】Docker Desktop 架構簡介

在閱讀前您需要了解 docker 架構&#xff1a;Docker architecture WSL 技術&#xff1a;什么是 WSL 2 1.Hyper-V backend 我們知道&#xff0c;Docker Desktop 最開始的架構的后端是采用的 Hyper-V。 Docker daemon (dockerd) 運行在一個 Linux distro (LinuxKit build) 中&…

Unity光照之Halo組件

簡介 Halo 組件 是一種用于在游戲中創建光暈效果的工具&#xff0c;主要用于模擬光源周圍的發光區域&#xff08;如太陽、燈泡等&#xff09;或物體表面的光線反射擴散效果。 核心功能 1.光暈生成 Halo 組件會在光源或物體的周圍生成一個圓形光暈&#xff0c;模擬光線在空氣…

Flink深入淺出之01:應用場景、基本架構、部署模式

Flink 1?? 一 、知識要點 &#x1f4d6; 1. Flink簡介 Apache Flink — Stateful Computations over Data StreamsApache Flink 是一個分布式大數據處理引擎&#xff0c;可對有界數據流和無界數據流進行有狀態的計算。Flink 能在所有常見集群環境中運行&#xff0c;并能以…

2025年【高壓電工】報名考試及高壓電工考試總結

隨著電力行業的快速發展&#xff0c;高壓電工成為確保電力系統安全穩定運行的重要一環。為了提高高壓電工的專業技能和安全意識&#xff0c;“安全生產模擬考試一點通”平臺特別整理了2025年高壓電工報名考試的相關信息及考試總結&#xff0c;并提供了一套完整的題庫&#xff0…

網絡HTTP

HTTP Network Request Library A Retrofit-based HTTP network request encapsulation library that provides simple and easy-to-use API interfaces with complete network request functionality. 基于Retrofit的HTTP網絡請求封裝庫&#xff0c;提供簡單易用的API接口和完…

os-copilot安裝和使用體驗測評

簡介&#xff1a; OS Copilot是阿里云基于大模型構建的Linux系統智能助手&#xff0c;支持自然語言問答、命令執行和系統運維調優。本文介紹其產品優勢、功能及使用方法&#xff0c;并分享個人開發者在云服務器資源管理中的實際應用體驗。通過-t/-f/管道功能&#xff0c;OS Cop…

Python Flask框架學習匯編

1、入門級&#xff1a; 《Python Flask Web 框架入門》 這篇博文條理清晰&#xff0c;由簡入繁&#xff0c;案例豐富&#xff0c;分十五節詳細講解了Flask框架&#xff0c;強烈推薦&#xff01; 《python的簡單web框架flask【附例子】》 講解的特別清楚&#xff0c;每一步都…

【HarmonyOS Next之旅】DevEco Studio使用指南(一)

目錄 1 -> 工具簡介 1.1 -> 概述 1.2 -> HarmonyOS應用/服務開發流程 1.2.1 -> 開發準備 1.2.2 -> 開發應用/服務 1.2.3 -> 運行、調試和測試應用/服務 1.2.4 -> 發布應用/服務 2 -> 工程介紹 2.1 -> APP包結構 2.2 -> 切換工程視圖 …

Manus開源平替-開源通用智能體

原文鏈接:https://i68.ltd/notes/posts/250306-opensource-agi-agent/ OWL-比Manus還強的全能開源Agent OWL: Optimized Workforce Learning for General Multi-Agent Assistance in Real-World Task Automation&#xff0c;現實世界中執行自動化任務的通用多代理輔助優化學習…

【3.2-3.8學習周報】

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 摘要Abstract一、方法介紹1.任務適應性持續預訓練&#xff08;TACP&#xff09;2.領域自適應連續預訓練&#xff08;DACP&#xff09;3.ETS-DACP和ETA-DACP 二、實驗…