day9 项目介绍及TCP的实现

这篇具有很好参考价值的文章主要介绍了day9 项目介绍及TCP的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

项目介绍

私人云盘(自动云同步)

1、什么是云同步?  

2、需求分析

3、如何实现手动同步?

实现TCP服务端

实现TCP客户端文章来源地址https://www.toymoban.com/news/detail-465168.html


项目介绍

私人云盘(自动云同步)

1、什么是云同步?  

  • 保持云端数据和终端数据的一致
  • 上传和下载
  • 实时同步
  • 定时同步
  • 手动同步

2、需求分析

  • 文件的上传和下载
  • 文件的大小不确定
  • 文件的个数不确定
  • 实时同步需要获取文件事件
  • 定时同步需要设置定时器
  • 使用TCP实现手动同步

3、如何实现手动同步?

  1. 实现TCP通信
  2. 使用TCP实现文件的上传和下载
  3. 实现整个目录下的文件的同步
  4. 实现项目框架
  5. 完成项目

实现TCP服务端

#include "tcp.h"

int main(int argc, char *argv[])
{
	int fd, newfd;
	int ret;
	char buf[BUFSIZ];
	Addr_in addr, client_addr;
	socklen_t addrlen = sizeof(addr);

	/*检查参数 */
	if (argc < 3) {
		fprintf(stderr, "%s <addr><port>\n", argv[0]);  
		//stderr是标准错误输出
		exit(EXIT_FAILURE);
	}

	/*创建套接字*/
	if((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		ErrExit("socket");

	/*设置通信结构体*/
	bzero(&addr, sizeof(addr));
	addr.sin_family = AF_INET;
	addr.sin_port = htons( atoi(argv[2]) );
	if (inet_aton(argv[1], &addr.sin_addr) == 0) {
		fprintf(stderr, "Invalid address\n");
		exit(EXIT_FAILURE);
	}

	/*绑定通信结构体*/
	if( bind(fd, (Addr *)&addr, sizeof(addr)))
		ErrExit("bind");

	/*监听模式*/
	if( listen(fd, BACKLOG) )
		ErrExit("listen");
	
	/*接收客户端连接*/
	do {
		newfd = accept(fd, (Addr *)&client_addr, &addrlen);
	}while(newfd < 0 && errno == EINTR); 
	//EINTR 宏含义: 如果信号导致的错误,继续执行
	if (newfd < 0) 
		ErrExit("accept");

	/*接收客户端数据*/
	while(1){
		do {
			ret = recv(newfd, buf, BUFSIZ, 0);
		}while(ret < 0 && errno == EINTR);
		if(ret < 0)
			ErrExit("recv");
		else if(!ret)
			break;
		else
			printf("[%s:%d]buf:%s\n", inet_ntoa(client_addr.sin_addr), 
					ntohs(client_addr.sin_port), buf);
	}

	close(newfd);
	close(fd);
	return 0;

}

实现TCP客户端

#include "tcp.h"

int main(int argc, char *argv[])
{
	int fd;
	int ret;
	char buf[BUFSIZ] = {"===test==="};
	Addr_in addr;

	/*检查参数 */
	if (argc < 3) {
		fprintf(stderr, "%s <addr><port>\n", argv[0]);  
		//stderr是标准错误输出
		exit(EXIT_FAILURE);
	}

	/*创建套接字*/
	if((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		ErrExit("socket");

	/*设置通信结构体*/
	bzero(&addr, sizeof(addr));
	addr.sin_family = AF_INET;
	addr.sin_port = htons( atoi(argv[2]) );
	if (inet_aton(argv[1], &addr.sin_addr) == 0) {
		fprintf(stderr, "Invalid address\n");
		exit(EXIT_FAILURE);
	}

	/*发起连接请求*/
	if( connect(fd, (Addr *)&addr, sizeof(addr)))
		ErrExit("connect");

	/*发送数据*/
	while(1){
		do {
			ret = send(fd, buf, BUFSIZ, 0);
		}while(ret < 0 && errno == EINTR);
		if(ret < 0)
			ErrExit("send");
		else if(!ret)
			break;
		printf("send data:%s", buf);
		fflush(stdout);
		getchar();
	}

	close(fd);
	return 0;

}

到了这里,关于day9 项目介绍及TCP的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录day9|实现strStr()、重复的子字符串

    一般的字符串匹配问题我们可以使用KMP算法来处理,当我们搜索文本串和模式串是否匹配的时候,我们先得到模式串的一个前缀表,其中前缀表中存放的内容是模式串的最长相等前后缀。例如文本串为:aabaabaafa,模式串为:aabaaf,那么文本串的前缀表就是010120。当我们开始搜

    2024年02月15日
    浏览(42)
  • arm:day9

    1。思维导图  2..I2C实验,检测温度和湿度 iic.h si7006.h iic.c si7006.c main.c  

    2024年02月10日
    浏览(34)
  • 驱动开发-day9

     驱动代码: 测试代码:

    2024年02月15日
    浏览(29)
  • 蓝桥杯打卡Day9

    文章目录 直角三角形 最长平衡串 本题思路: 本题就是利用欧几里得距离求解即可。  本题思路: 找一个连续的子串, 使得子串中‘0’和‘1’的个数能抵消,利用前缀和a[i]统计前i个字符中有多少个‘1’, 前缀和b[i]统计前i个字符中有多少个‘0’,记该最大连续子串开始地方为

    2024年02月07日
    浏览(30)
  • 每日打卡day9——差分矩阵

    输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将选中的子矩阵中的每个元素的值加上 c。 请你将进行完所有操作后的矩阵输出。 输入格式 第一行包

    2024年02月16日
    浏览(35)
  • 数据结构基础day9

    解法1:哈希表 解法2:哈希表+滑动窗口+位运算 好长,不想看 解法1:暴力解法 遍历每一个子串,当其是回文子串且长度最大,存储初始位置和长度。 时间复杂度O(n^3),空间复杂度O(1) 解法2:动态规划 相当于在暴力解法的基础上空间换时间,时间复杂度O(n^2),空间复杂度O

    2024年02月11日
    浏览(29)
  • flutter学习-day9-基础组件

    本文学习和引用自《Flutter实战·第二版》:作者:杜文 Text:用于显示简单样式文本,它包含一些控制文本显示样式的一些属性: TextStyle:用于指定文本显示的样式如颜色、字体、粗细、背景等: TextSpan:代表文本的一个片段,可对一个 Text 内容的不同部分按照不同的样式显

    2024年02月04日
    浏览(30)
  • C基础day9(2023.7.11)

     练习1:实现字符串逆置  练习2:值传递   练习3: 指针和一维数组  练习4:使用指针实现冒泡排序、简单选择排序  练习5:指针指向字符数组的地址  练习6: 定义数组str,指针p,通过p指向str               通过指针实现输入               通过指针把大小转换小写

    2024年02月16日
    浏览(24)
  • 计算机网络 day9 DNAT实验

    目录 DNAT DNAT策略的典型应用环境 DNAT策略的原理 在网关中使用DNAT策略发布内网服务器 DNAT实验: 实验环境: DNAT网络规划拓扑图: 步骤: 1、创建linux客户端Web网站(go语言),实现Web服务器 1.1、下载go语言Web端代码 1.2、下载代码后传输到你的linux客户机上去 1.3、解压apiser

    2024年02月16日
    浏览(24)
  • ARM day9 (按键中断控制led亮灭)

     保存现场 异常的处理流程,保存现场会做哪些事情(四大步三小步) ----CPU自动完成 1.保存CPSR寄存器中的值,到SPSR_mode寄存器中 2.修改CPSR寄存器对应的位         1修改CPSR寄存器对应的状态位(T位)         2根据需要,禁止相应中断位(I位 / F位)         3修改CPSR寄存

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包