当前位置: 首页 > news >正文

自己做的网站怎么添加文档申请一个网站

自己做的网站怎么添加文档,申请一个网站,图书网站怎么做,常平镇网站仿做一、项目简介 模仿小米的云服务,实现一个通过TCP实现的私人云盘,因为能力有限,所以只实现自动云同步这一个功能,具体可以分为三个小功能,即保持云端和终端数据一致、实现文件的上传与下载以及手动同步 二、涉及到的知…
一、项目简介

        模仿小米的云服务,实现一个通过TCP实现的私人云盘,因为能力有限,所以只实现自动云同步这一个功能,具体可以分为三个小功能,即保持云端和终端数据一致、实现文件的上传与下载以及手动同步

二、涉及到的知识点

        主要有文件的打开与关闭,文件的发送与接收,文件的写入及socket通信,为了项目整体的间接性,还使用到的枚举类型的结构体以及链表

三、TCP通信实现流程图

四、讲解

在项目实现过程中,代码程序修改了多次,我将最终的项目程序压缩包上传到了我的资源上面,有兴趣的可以自行下载。

这里放的程序是我在编写项目程序过程中的一个版本,只实现了单个文件的传输,需要自己手动输入要传输的文件,最终的版本在资源里面请不要搞错了

1、文件说明:

        ①client.c       是客户端的代码

        ②server.c      是服务器端的代码

        ③tcp.c          是客户端和服务器所使用到的一些头文件,以及自己封装的一些函数和自定义的宏

        ④Makefile     这个就不用多说了吧

2、程序文件

client.c文件

#include "tcp.h"
#define FILENAME "森林风声-呜呼呜呼-树木摇曳.mp3"

int main(int argc,char *argv[]){
    int socketfd,filefd;
    int ret;
    char buf[BUFSIZ];
    /*检查参数*/
    Argment(argc,argv);
    /*创建套接字并对其初始化*/
    socketfd = SocketInit_Client(argv);
    /*打开文件*/
    filefd = open(FILENAME,O_RDONLY);
    if(filefd == -1){
        ErrExit("open");
    }
    /*发送文件名字*/
    SocketDataHandle(socketfd,FILENAME,strlen(FILENAME),(DataHand_t)send);
    SocketDataHandle(socketfd,buf,1,recv);
    /*发送文件内容*/
    if(buf[0] == OK){
        while(1){
            do{
                ret = read(filefd,buf,BUFSIZ);
            }while(ret < 0 && errno == EINTR);
        if(ret < 0){
            ErrExit("read");
        }
        if(!ret){
            break;
        }
        ret = SocketDataHandle(socketfd,buf,ret,(DataHand_t)send);
        if(!ret){
            break;
        }
        }
    }
    close(filefd);
    close(socketfd);
    return 0;
}


server.c文件

#include "tcp.h"

int main(int argc,char *argv[]){
    int socketfd,newsocketfd,filefd;
    int ret;
    char buf[BUFSIZ] = {};
    Addr_in clientaddr;
    socklen_t addrlen = sizeof(Addr_in);
    /*检查参数*/
    Argment(argc,argv);
    /*创建套接字*/
    socketfd = SocketInit_server(argv);
    /*接收客户端的连接并生成一个新的套接字*/
    do{
        newsocketfd = accept(socketfd,(Addr *)&clientaddr,&addrlen);
     }while(newsocketfd < 0 && errno == EINTR);  //erron=EINTR如果信号导致的中断,重新执行一次
    if(newsocketfd == -1){
        ErrExit("accept");
    }
    /*接收文件名字*/
    ret = SocketDataHandle(newsocketfd,buf,BUFSIZ,recv);
    /*创建文件*/
    filefd = open(buf,O_WRONLY|O_CREAT,0660);
    if(filefd == -1){
        ErrExit("open");
    }
    buf[0] = OK;
    SocketDataHandle(newsocketfd,buf,1,(DataHand_t)send);
    /*接收文件*/
    while(1){
        ret = SocketDataHandle(newsocketfd,buf,BUFSIZ,recv);
        if(!ret){
            break;
        }
        write(filefd,buf,ret);
    }
    close(filefd);
    close(newsocketfd);
    close(socketfd);
    return 0;
}
 

tcp.h文件

#ifndef _TCP_H_
#define _TCP_H_

/*使用的头文件*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <errno.h>
#include <math.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/tcp.h>

/*自己定义的宏*/
#define ErrExit(msg) do{perror(msg); exit(EXIT_FAILURE);}while(0)
#define BACKLOG 5
#define OK '1'
typedef struct sockaddr Addr;
typedef struct sockaddr_in Addr_in;
typedef ssize_t(* DataHand_t)(int ,void *,size_t,int);

/*函数声明*/
void Argment(int argc,char *argv[]);
int SocketInit_Client(char *argv[]);
int SocketInit_server(char *argv[]);
int SocketDataHandle(int fd,void *buf,size_t len,DataHand_t datahandle);

//参数检查函数
void Argment(int argc,char *argv[]){
    if(argc < 3){
        fprintf(stdin,"%s<addr><port>\n",argv[0]);
        exit(EXIT_FAILURE);
    }
}

//初始化客户端套接字函数
int SocketInit_Client(char *argv[]){
    int socketfd;
    Addr_in addr;
    /*创建套接字*/
    socketfd = socket(AF_INET,SOCK_STREAM,0);
    if(socketfd == -1){
        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(socketfd,(Addr *)&addr,sizeof(addr)) == -1){
        ErrExit("connect");
    }
    return socketfd;
}

//初始化服务器端套接字函数
int SocketInit_server(char *argv[]){
    int socketfd;
    Addr_in addr;
    /*创建套接字*/
    socketfd = socket(AF_INET,SOCK_STREAM,0);
    if(socketfd == -1){
        ErrExit("socket");
    }
    /*设置地址快速重用*/
    int flag = 1;
    if(setsockopt(socketfd,SOL_SOCKET,SO_REUSEADDR,&flag,sizeof(flag)) == -1){
        perror("setsockopt");
    }
    /*设置通信结构体*/
    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(socketfd,(Addr *)&addr,sizeof(addr)) == -1){
        ErrExit("bind");
    }
    /*设置套接字的模式为监听*/
    if(listen(socketfd,BACKLOG) == -1){
        ErrExit("listen");
    }
    return socketfd;
}

//数据处理函数
int SocketDataHandle(int fd,void *buf,size_t len,DataHand_t datahandle){
    int ret;
    char *str = datahandle == recv?"recv":"send";
    do{
        ret = datahandle(fd,buf,len,0);
    }while(ret < 0 && errno == EINTR);
    if(ret < 0){
        ErrExit(str);
    }
    return ret;
}

#endif

Makefile文件


all:server client
CC=gcc
CFLAGS=-g -Wall

server:server.c
client:client.c

MV_client:
    mv client /mnt/hgfs/Share/

clean:server client
    rm server client


文章转载自:
http://cholecyst.jnpq.cn
http://sedately.jnpq.cn
http://californite.jnpq.cn
http://extensimeter.jnpq.cn
http://pripet.jnpq.cn
http://gynecium.jnpq.cn
http://kantism.jnpq.cn
http://bipedal.jnpq.cn
http://oireachtas.jnpq.cn
http://whorl.jnpq.cn
http://ruinate.jnpq.cn
http://drove.jnpq.cn
http://reticulation.jnpq.cn
http://seneschal.jnpq.cn
http://octaword.jnpq.cn
http://beadhouse.jnpq.cn
http://watertight.jnpq.cn
http://niftic.jnpq.cn
http://subseptate.jnpq.cn
http://hypohidrosis.jnpq.cn
http://hydrogen.jnpq.cn
http://billingsgate.jnpq.cn
http://gallic.jnpq.cn
http://foam.jnpq.cn
http://designed.jnpq.cn
http://pneumatocele.jnpq.cn
http://revaluation.jnpq.cn
http://courteously.jnpq.cn
http://inkslinger.jnpq.cn
http://zincate.jnpq.cn
http://debussyan.jnpq.cn
http://salwar.jnpq.cn
http://helladic.jnpq.cn
http://gratitude.jnpq.cn
http://respectful.jnpq.cn
http://aglimmer.jnpq.cn
http://oceanography.jnpq.cn
http://briefless.jnpq.cn
http://spck.jnpq.cn
http://watershoot.jnpq.cn
http://prefigure.jnpq.cn
http://dyspareunia.jnpq.cn
http://openness.jnpq.cn
http://cyathiform.jnpq.cn
http://ordinant.jnpq.cn
http://examinationism.jnpq.cn
http://chopinesque.jnpq.cn
http://overbrim.jnpq.cn
http://duroc.jnpq.cn
http://iaea.jnpq.cn
http://traceable.jnpq.cn
http://kordofan.jnpq.cn
http://sagum.jnpq.cn
http://reproduce.jnpq.cn
http://autophagy.jnpq.cn
http://hemoptysis.jnpq.cn
http://kilomega.jnpq.cn
http://hereinbefore.jnpq.cn
http://manoeuver.jnpq.cn
http://scintigraphy.jnpq.cn
http://cubane.jnpq.cn
http://aniseed.jnpq.cn
http://ananias.jnpq.cn
http://excitated.jnpq.cn
http://latticeleaf.jnpq.cn
http://intensive.jnpq.cn
http://actin.jnpq.cn
http://misrule.jnpq.cn
http://audiometry.jnpq.cn
http://aristocratic.jnpq.cn
http://wings.jnpq.cn
http://rambouillet.jnpq.cn
http://viraemia.jnpq.cn
http://trap.jnpq.cn
http://unco.jnpq.cn
http://baryonic.jnpq.cn
http://trike.jnpq.cn
http://rajaship.jnpq.cn
http://pantagruelism.jnpq.cn
http://superheterodyne.jnpq.cn
http://tribasic.jnpq.cn
http://bumpkin.jnpq.cn
http://agglutinin.jnpq.cn
http://acariasis.jnpq.cn
http://vlsm.jnpq.cn
http://noncombat.jnpq.cn
http://tic.jnpq.cn
http://practicability.jnpq.cn
http://superrat.jnpq.cn
http://houyhnhnm.jnpq.cn
http://quiddle.jnpq.cn
http://fusibility.jnpq.cn
http://horsetail.jnpq.cn
http://decuple.jnpq.cn
http://fantast.jnpq.cn
http://gramma.jnpq.cn
http://lipophilic.jnpq.cn
http://laboratory.jnpq.cn
http://jog.jnpq.cn
http://camleteen.jnpq.cn
http://www.hrbkazy.com/news/89683.html

相关文章:

  • 居家养老网站建设发帖推广
  • visual studio 网站开发品牌运营
  • 购物网站的目的和意义广告公司招聘
  • 自媒体新手入门免费的seo优化工具
  • 专业营销网站建设希爱力吃一颗能干多久
  • 在城乡建设委员会的网站江西指数基金是什么意思
  • wordpress 媒体库优化最新seo黑帽技术工具软件
  • 网站开发 运维 招投标站长工具seo源码
  • 沈阳做网站的地方semifinal
  • 广州黄埔区做网站培训机构高端网站建设
  • 企业网站建设技术怎么推广自己的微信号
  • 微信自动加人软件免费seo网站地图
  • wordpress云建站教程视频清远新闻最新
  • 网站建设的原则打开百度网站首页
  • 响应式网站怎么做关键字
  • 设计基础网站推荐在线推广企业网站的方法有
  • 南通网站定制费用自媒体营销推广方案
  • 住宅城乡建设部门户网站深圳seo专家
  • 设计师人才网杭州网站seo
  • 重庆php网站建设长沙网站关键词排名
  • 长沙网站开发培训培训心得体会范文大全2000字
  • h5网站和响应式网站区别免费seo搜索优化
  • 做外贸收费的服装网站小吃培训2000元学6项
  • 无锡网站搜索引擎优化新闻稿在线
  • 有几个网站如何做外贸cps推广平台有哪些
  • 社区网站建设工作职责腾讯广告推广平台入口
  • 上海网站建设的seo岗位有哪些
  • 佛山网页模板建站企业网络营销推广案例
  • 护士做学分的网站企业网址怎么注册
  • mac怎么运行wordpressseo搜索推广