当前位置: 首页 > news >正文

Linux软件编程--网络操作

1、套接字文件 socket

  1.概述

  • 套接字文件是Linux系统中一种特殊文件类型,用于进程间通信
  • 支持同一主机上的进程高效通信,无需经过网络协议栈

  2.分类

  • 流式套接字(SOCK_STREAM):类似于TCP,提供可靠、有序的双向字节流通信,适用于对精度要求比较高的场景
  • 数据报套接字(SOCK_DGRAM):类似UDP,提供无连接、不可靠的数据报服务,适用于实时性要求高的场景

2、TCP C/S模型

  1.概述

  •  C/S模型是一种分布式架构,客户端主动发起请求,服务器被动响应并提供服务
  • TCP通过三次握手建立连接,确保通信双方收发能力正常,连接建立后,双方可同时发送和接收数据

  2.工作流程

        服务器端
  • 创建Socket :调用socket()创建监听套接字
  • 绑定地址:使用bind()将套接字绑定到IP地址和端口
  • 监听连接:通过listen()设置最大连接数、进入LISTEN状态
  • 接受连接:accept()阻塞等待客户端连接,返回新的通信套接字connfd
  • 数据传输:调用read()、write()等函数实现数据交换
  • 关闭连接:调用close()释放资源
        客户端
  • 创建Socket :调用socket()创建监听套接字
  • 连接服务器:调用connect()指定服务器IP和端口
  • 数据传输:同服务器端
  • 关闭连接:同服务器端

3、相关函数接口介绍

        下文中均为在Linux操纵系统下的网络函数

  1.socket

原型:

        int socket(int domain, int type, int protocol);

功能: 

        创建了通信的一端

参数:

        domain:协议族(指定通信的地址类型,决定Socket的地址结构)

                AF_INET:IPv4地址

                AF_INET6:IPv6地址

                AF_UNIX:本地进程间通信

                AF_PACKET:底层数据包捕获,如原始套接字

        type:套接字类型

                SCOK_STREAM:面向连接的字节流(TCP),保证数据可靠、有序

                SCOK_DGRAM:无连接的数据报(UDP),速度快但不可靠

        protocol:协议类型

                IPPRTOTO_TCP:强制使用TCP协议

                IPPRTOTO_UDP:强制使用UDP协议

                0:根据前两个参数自动选择协议类型

返回值:

        成功返回文件描述符

        失败返回-1

  2.connect

原型:

        int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:

        通过 socket 创建的通信端连接到指定地址上

参数:

        sockfd:socket创建的通信端

        addr:目标服务器地址结构体(不同类型地址结构体不同)

        addrlen:结构体的长度

返回值:

        成功返回 0

        失败返回 -1

ipv4地址结构体

        struct sockaddr_in {
sa_family_t    sin_family; //协议族
in_port_t      sin_port;   //端口号
struct in_addr sin_addr;   //IP地址
};

  3.bind

原型:

        int bind   (int sockfd, const struct sockaddr *addr, socklen_t addrlen);

功能:

        给 socket 创建的通信端绑定一个地址信息

参数:

        sockfd:socket创建的通信端

        addr:要绑定的地址

        addrlen:要绑定的地址大小

返回值

        成功返回 0

        失败返回 -1

4.listen

原型:

        int listen(int sockfd,int backlog);

功能:

        用于将套接字从主动模式转换为被动模式,使其能够监听并接受客户端的连接请求

参数:

        sockfd:socket创建的通信端

        backlog:处理连接队列的最大长度

返回值:

        成功返回 0

        失败返回 -1

  5.accept

原型:

        int accept (int sockfd,     struct sockaddr *addr, socklen_t *addrlen);
功能:

           从监听的地址中提取连接请求,完成连接(三次握手)

参数:

        sockfd:监听到的地址端

        addr:用来存放,客户端的地址信息 

        addrlen:值结果参数

返回值:

        成功返回已连接端的文件描述符

        失败返回 -1

http://www.dtcms.com/a/341975.html

相关文章:

  • FreeRTOS,事件标注组创建,xEventGroupCreate、xEventGroupCreateStatic
  • 【自记】Power BI 中 CALCULATETABLE 第二个及后续参数支持的两种类型说明
  • 基于混合注意力网络和深度信念网络的鲁棒视频水印技术基础理论深度解析
  • 【世纪龙科技】汽车专业虚拟仿真实训基地建设-理实虚一体化实践
  • 【lucene】lucene常用查询一览
  • 一键去除 Windows 图标角标(小箭头、盾牌与双箭头)
  • JeeSite V5.13.0 发布,升级 Spring Boot 3.5,Cloud 2025,AI 1.0,Vite 7
  • ORACLE中如何批量重置序列
  • 如何保证数据库和缓存的一致性?
  • 强化学习中的重要性采样:跨分布复用样本的核心技术
  • 大模型0基础开发入门与实践:第8章 “大力出奇迹”的哲学:大语言模型的核心技术揭秘
  • 【世纪龙科技】汽车专业虚拟仿真实训基地建设方案
  • 嵌入式软件典型架构:层次化模式 vs 递归模式
  • Java Main无法初始化主类的原因与解决方法(VsCode工具)
  • 【Java后端】Spring Boot 实现请求设备来源统计与UA解析全攻略
  • 智慧工厂的 “隐形大脑”:边缘计算网关凭什么重构设备连接新逻辑?
  • 编程刷题-资料分发1 图论/DFS
  • Kotlin-基础语法练习二
  • Android面试指南(四)
  • [新启航]机械深孔加工质控:新启航方案用激光频率梳破解 130mm 深度遮挡瓶颈
  • 闲聊汽车芯片的信息安全需求和功能
  • C# NX二次开发:反向控件和组控件详解
  • 智慧巡检新标杆:智能移动机器人——电力行业的守护者
  • 【数据结构】树与二叉树:结构、性质与存储
  • 解码欧洲宠物经济蓝海:跨境电商突围的战略逻辑与运营范式
  • Vue2+Vue3前端开发_Day5
  • 【PZ-A735T-KFB】璞致fpga开发板 Artix-7 系列之PA-Starlite-初学入门首选 开发板用户手册
  • 《Python 整数列表分类:巧妙将负数移到正数前面》
  • 力扣hot100:无重复字符的最长子串,找到字符串中所有字母异位词(滑动窗口算法讲解)(3,438)
  • LeetCode每日一题,2025-08-21