提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
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通讯的实现,注:以上代码只可实现一次通讯,发一次信息;若想多次通讯可通过while(1)循环来实现。