【计算机网络】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.mzph.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 二、实验…