目录
项目介绍
私人云盘(自动云同步)
1、什么是云同步?
2、需求分析
3、如何实现手动同步?
实现TCP服务端文章来源:https://www.toymoban.com/news/detail-465168.html
实现TCP客户端文章来源地址https://www.toymoban.com/news/detail-465168.html
项目介绍
私人云盘(自动云同步)
1、什么是云同步?
- 保持云端数据和终端数据的一致
- 上传和下载
- 实时同步
- 定时同步
- 手动同步
2、需求分析
- 文件的上传和下载
- 文件的大小不确定
- 文件的个数不确定
- 实时同步需要获取文件事件
- 定时同步需要设置定时器
- 使用TCP实现手动同步
3、如何实现手动同步?
- 实现TCP通信
- 使用TCP实现文件的上传和下载
- 实现整个目录下的文件的同步
- 实现项目框架
- 完成项目
实现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模板网!