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

Linux网络编程3

并发服务器

1.TCP多进程并发服务器

服务器端:

客户端:

2.TCP多线程服务器

服务器端:

客户机端:

需要学习的函数还有

1. send() 函数

send() 函数用于在套接字上发送数据。它是网络编程中发送数据到对端的主要函数之一。

函数原型

#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
  • sockfd:套接字文件描述符,是通过socket()函数创建的。
  • buf:指向要发送数据的缓冲区的指针(发送缓冲区的首地址)。
  • len:要发送的数据的字节数。
  • flags:调用send()时的选项标志,通常设置为0(作用和write相同)。其中:MSG_DONTWAIT,非阻塞。MSG_OOB:用于TCP类型的带外数据(out of band(通常用于终中断的操作))

返回值:成功时返回发送的字节数(可能小于请求发送的字节数),出错时返回-1并设置errno。

2. recv() 函数

recv() 函数用于从套接字接收数据。它是网络编程中接收对端发送数据的主要函数之一。

函数原型

#include <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
  • sockfd:套接字文件描述符。
  • buf:指向接收数据的缓冲区的指针。
  • len:缓冲区的大小,即最多可以接收的字节数。
  • flags:调用recv()时的选项标志,通常设置为0。

返回值:成功时返回接收到的字节数(可能小于请求接收的字节数,例如,当对方发送的数据量小于请求量时),连接被对方正常关闭时返回0,出错时返回-1并设置errno。

3. read() 函数

read() 函数是UNIX/Linux系统调用之一,用于从文件描述符(包括套接字)读取数据。在网络编程中,它也可以用来从套接字接收数据,但通常recv()函数更为常用,因为recv()提供了更丰富的错误处理和选项。

函数原型

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
  • fd:文件描述符,对于套接字编程来说,这就是套接字文件描述符。
  • buf:指向缓冲区的指针,用于存储读取的数据。
  • count:请求读取的字节数。

返回值:成功时返回读取的字节数(可能小于请求读取的字节数),到达文件末尾时返回0,出错时返回-1并设置errno。

区别与联系

  • 使用场景:在网络编程中,send()recv() 专门用于套接字通信,而 read() 虽然也可以用于套接字,但更通用,可用于文件、管道等多种类型的文件描述符。
  • 功能send()recv() 提供了更丰富的网络编程特性,如消息边界的保持(在某些套接字类型中),而 read() 则更基础,更通用。
  • 性能:在大多数情况下,对于套接字通信,send()recv() 的性能与 read() 相当,但使用send()recv() 可以使代码更清晰,更易于理解和维护。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 20240807 每日AI必读资讯
  • UNI-APP_点击,长按,触摸,结束触摸事件
  • 【C/C++笔记】:易错难点3 (二叉树)
  • Redis哨兵集群部署 一主两从三哨兵以及持久化
  • 动态规划之——背包DP(进阶篇)
  • 网络原理(2)——封装和分用
  • 鸿蒙图形开发【3D引擎接口示例】
  • 数据结构——排序(1):插入排序
  • 递归深度问题和尾调用的关系
  • Linux中多线程压缩软件 | Mingz
  • jupyter下载
  • 软件RAID配置实战(2个案例场景)
  • 【云原生】ConfigMap存储
  • 浅谈操作系统
  • Python处理日期时间常用操作
  • Js基础知识(四) - js运行原理与机制
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PAT A1092
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • web标准化(下)
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 笨办法学C 练习34:动态数组
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 代理模式
  • 基于web的全景—— Pannellum小试
  • ------- 计算机网络基础
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 小程序button引导用户授权
  • 如何在招聘中考核.NET架构师
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​Java基础复习笔记 第16章:网络编程
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (二)正点原子I.MX6ULL u-boot移植
  • (计算机网络)物理层
  • (剑指Offer)面试题34:丑数
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (论文阅读30/100)Convolutional Pose Machines
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (五)IO流之ByteArrayInput/OutputStream
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .NET CORE Aws S3 使用
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET6 命令行启动及发布单个Exe文件
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET序列化 serializable,反序列化
  • @Autowired @Resource @Qualifier的区别
  • @EnableAsync和@Async开始异步任务支持
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ C++ ] 继承
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ IO.File ] FileSystemWatcher
  • [ 数据结构 - C++] AVL树原理及实现