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

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


前言

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)循环来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值