linux下io事件管理:单个I/O通讯

news/2024/9/19 16:54:07 标签: linux, 运维, 服务器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、I/O是什么?
  • 二、单个I/O服务端通讯
    • 1.定义客户端,


前言

1、使用微信:发送文字、图片、视频等内容,如何实现?
2、刷抖音如何得到视频资源。
3、使用github/gitlab的gitclone时,代码为何能到本地
4、共享电动车开锁?
上述一切离不开网络i/o

一、I/O是什么?

i/o可类比为一根水管,用于客户端与服务端进行通信

二、单个I/O服务端通讯

1.定义客户端,

代码如下(示例):

int sockfd = socket(AF_INET,SOCK_STREAM, 0);//假如服务器是一个酒店,该代码可理解为,聘请一个迎宾人员

    struct sockaddr_in servaddr;            //定义服务器地址
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//0.0.0.0
    servaddr.sin_port = htons(2000);//0-1023,端口须>1024

    if(-1 == bind(sockfd,(struct sockaddr*)&servaddr,sizeof (struct sockaddr))){//判断是否绑定成功
            printf("bind failed : %s\n",strerror(errno));
}


    listen(sockfd,10);
    printf("listen finished :%d\n",sockfd);  //可观察scokfd值为3

    struct sockaddr_in clientaddr;    //定义客户端地址地址
    socklen_t len = sizeof(clientaddr);
    

## 2.传递数据
代码如下(示例):
```c
	printf("accept\n");
	int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len);//等待接受请求
	printf("accept finshed\n");

	char buffer[1024] = {0};
	int count = recv(clientfd, buffer, 1024, 0);//读数据
	printf("RECV: %s\n", buffer);

	count = send(clientfd, buffer, count, 0);//发数据
	printf("SEND: %d\n", count);
//以上为main函数内容
# 三、实现效果
验证上述代码有效性:
加入头文件:
#include<errno.h>
#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>

键盘敲击一个字符函数退出
    getchar();
    printf("excit\n");
    return 0;

Ubuntu上编译后运行,借助NetAssist工具
![工具设置注意如上](https://i-blog.csdnimg.cn/direct/fc5d0384c537483e8c86db0bddab73cd.png)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3d33c0d4bfd24d12b046415654ced72f.png)
运行结果如下
![测试成功](https://i-blog.csdnimg.cn/direct/a4f8f51bdbbc4041ba7c63f0ed992fa4.png)

# 总结
以上就是单个i/o通讯的实现,注:以上代码只可实现一次通讯,发一次信息;若想多次通讯可通过while1)循环来实现。

http://www.niftyadmin.cn/n/5665864.html

相关文章

21. 什么是MyBatis中的N+1问题?如何解决?

N1 问题是指在进行一对多查询时&#xff0c;应用程序首先执行一条查询语句获取结果集&#xff08;即 1&#xff09;&#xff0c;然后针对每一条结果&#xff0c;再执行 N 条额外的查询语句以获取关联数据。这个问题通常出现在 ORM 框架&#xff08;如 MyBatis 或 Hibernate&…

html页面整合vue2或vue3

Vue 2 使用指南 1. 引入 Vue 2 1.1 下载 Vue 2 下载地址: Vue 2 下载文件名: vue.min.js保存位置: 项目目录/js/vue.min.js 1.2 引入 Vue 2 文件 在 HTML 文件的 <head> 部分引入 Vue 2&#xff1a; <!DOCTYPE html> <html lang"en"> <he…

Linux平台UOS系统摄像头播放

关于播放功能做了很久得研究,网上关于Linux平台摄像头播放资料比较少,目前研究出3种实现摄像头播放的方式。 注:三种方式均在jdk版本21基础上实现。 一 WebCam实现本地摄像头预览 1.引入webcam 在pom.xml中加入,即可 <dependency> <groupId>c…

速通LLaMA2:《Llama 2: Open Foundation and Fine-Tuned Chat Models》全文解读

文章目录 概览LLaMA和LLaMA2的区别AbstractIntroductionPretrainingFine-tuning1. 概括2、Supervised Fine-Tuning&#xff08;SFT&#xff09;3、⭐Reinforcement Learning with Human Feedback&#xff08;RLHF&#xff09;&#x1f53a;总览Training Objectives&#xff1a;…

MATLAB系列07:稀疏矩阵、单元阵列和结构

MATLAB系列07&#xff1a;稀疏矩阵、单元阵列和结构 7. 稀疏矩阵、单元阵列和结构7.1 稀疏矩阵7.1.1 sparse数据类型7.1.1.1 产生稀疏矩阵7.1.1.2 稀疏矩阵的运算 7.2 单元阵列(cell array)7.2.1 创建单元阵列7.2.1.1 用赋值语句创建单元阵列7.2.1.2 用cell函数创建单元阵列 7.…

OpenMV与STM32

OpenMV与STM32之间的通信是嵌入式系统开发中常见的应用场景&#xff0c;尤其在需要结合机器视觉和复杂逻辑控制的系统中。OpenMV是一款开源的机器视觉模块&#xff0c;它基于MicroPython&#xff0c;具有图像采集和处理能力&#xff1b;而STM32则是一款功能强大的单片机&#x…

全面理解tensor编程中矩阵的行和列

经常会在编程中遇到理解矩阵行和列的事情。 1、要明确无论这个张量有多少维度&#xff0c;它的矩阵乘法都只能作用于最后两个维度。 例如&#xff1a; import torcha torch.rand([64, 32, 3, 4]) b torch.rand([64, 32, 3, 4])c torch.matmul(a, b.transpose(2, 3)) # 交…

数据结构(十四)——HashMap与HashSet(OJ题)

一.只出现一次的数字 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决…