当前位置: 首页 > 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() 可以使代码更清晰,更易于理解和维护。

http://www.lryc.cn/news/416944.html

相关文章:

  • gitlab 服务器安装
  • 【pytorch】全连接网络简单二次函数拟合
  • git提交到本地仓库了,怎么撤回
  • lua学习(1)
  • SQL报错注入之updatexml
  • 单元测试的重要性
  • mysql线上查询数据注意锁表问题
  • UE5 右键菜单缺少Generate Visual Studio project files
  • 前端性能优化-webpack构建优化
  • Traefik:部署与实战
  • [Spring] SpringBoot统一功能处理与图书管理系统
  • 实现吸顶效果,一个页面多个元素吸顶效果
  • 【C++入门(下)】—— 我与C++的不解之缘(二)
  • 【数据结构】哈希应用-STL-位图
  • Unbuntu 服务器- Anaconda安装激活 + GPU配置
  • python 装饰器记录函数用时
  • 实验10 任何一个非0自然数m的立方均可写成m个连续奇数之和。
  • Jenkins的安装方式
  • 网络之华为S5700S-52P-LI交换机系统恢复
  • 蜂窝网络架构
  • 培训第二十二天(mysql数据库主从搭建)
  • 速盾:CDN回源失败都有什么原因?
  • C语言 | Leetcode C语言题解之第328题奇偶链表
  • 8月6日笔记
  • 爱可声助听器:在全球听力市场中破冰前行
  • 华为OD面试 - 最佳升级时间窗(Java JS Python C C++)
  • LE-50821F/FA激光扫描传感器|360°避障雷达之性能参数与配置清单说明
  • 精准洞察农田生态,智慧农业物联网环境监测与数据采集系统来袭
  • sql注入复现(1-14关)
  • Spring Boot-12