国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

lv8 嵌入式開發(fā) 網(wǎng)絡(luò)編程開發(fā) 21 私有云盤項(xiàng)目

這篇具有很好參考價(jià)值的文章主要介紹了lv8 嵌入式開發(fā) 網(wǎng)絡(luò)編程開發(fā) 21 私有云盤項(xiàng)目。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1云盤項(xiàng)目簡介

2 項(xiàng)目實(shí)現(xiàn)

2.1 首先實(shí)現(xiàn)TCP客戶端、服務(wù)端

2.2 實(shí)現(xiàn)客戶端函數(shù)簡化

2.3 實(shí)現(xiàn)服務(wù)端函數(shù)簡化

2.4 TCP數(shù)據(jù)連包現(xiàn)象

2.5 封裝send函數(shù)和recv函數(shù)

2.6 建立readme說明

2.7 實(shí)現(xiàn)文件傳輸

2.8 讀取配置文件種的ip、端口號,通過argv[1]參數(shù)實(shí)現(xiàn)文件傳輸

3 最終項(xiàng)目?


1云盤項(xiàng)目簡介

常見的云盤服務(wù)軟件

lv8 嵌入式開發(fā) 網(wǎng)絡(luò)編程開發(fā) 21 私有云盤項(xiàng)目,嵌入式開發(fā),網(wǎng)絡(luò),linux

什么是云同步??

  • 保持云端數(shù)據(jù)和終端數(shù)據(jù)的一致
  • 上傳和下載
  • 實(shí)時(shí)同步
  • 定時(shí)同步
  • 手動(dòng)同步

需求分析

  • 文件的上傳和下載
  • 文件的大小不確定(文件太大,upd傳輸就不合適)
  • 文件的個(gè)數(shù)不確定
  • 實(shí)時(shí)同步需要獲取文件事件(因?yàn)橛醚h(huán)太占cpu)
  • 定時(shí)同步需要設(shè)置定時(shí)器
  • 使用TCP實(shí)現(xiàn)手動(dòng)同步

如何實(shí)現(xiàn)手動(dòng)同步?

  • 實(shí)現(xiàn)TCP通信
  • 使用TCP實(shí)現(xiàn)文件的上傳和下載
  • 實(shí)現(xiàn)整個(gè)目錄下的文件的同步
  • 實(shí)現(xiàn)項(xiàng)目框架
  • 完成項(xiàng)目

2 項(xiàng)目實(shí)現(xiàn)

2.1 首先實(shí)現(xiàn)TCP客戶端、服務(wù)端

cloud-project_v1

為了方便管理頭文件,新建tcp.h

#ifndef _TCP_H
#define _TPC_H

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <errno.h>

#define ErrExit(msg) do{ perror(msg); \              //異常處理宏定義
						 exit(EXIT_FAILURE);\
					   }while(0);
typedef struct sockaddr Addr;
typedef struct sockaddr_in Addr_in;
#define BACKLOG 5

#endif

實(shí)現(xiàn)server.c

#include "tcp.h"

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


	//檢查參數(shù)
	if(argc < 3)
	{
		fprintf(stderr, "%s <addr> <port>\n", argv[0]);
		exit(EXIT_FAILURE);
	}

	//創(chuàng)建套接字
	if((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		ErrExit("socket");

	//設(shè)置通信結(jié)構(gòu)體
	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);
	}
	
	//綁定通信結(jié)構(gòu)體
	if(bind(fd,(Addr *)&addr, sizeof(addr)))
		ErrExit("bind");

	//監(jiān)聽模式
	if(listen(fd, BACKLOG))
		ErrExit("listen");

	//接收客戶端鏈接
	bzero(&client_addr,sizeof(client_addr));
	do
	{
		newfd = accept(fd, (Addr *)&client_addr, &addrlen);
	}while(newfd < 0 && errno == EINTR);
	if(newfd < 0)
		ErrExit("accept");

	//接收客戶端數(shù)據(jù)
	while(1)
	{
		do 
		{
			ret = recv(newfd, buf, BUFSIZ, 0);
		}while(ret < 0 && errno == EINTR); //如果信號導(dǎo)致的錯(cuò)誤,繼續(xù)執(zhí)行
		if(ret < 0)
		{
			ErrExit("recv");
		}
		else if(!ret)  //ret = 0 客戶端退出
		{
			break;
		}
		else           //ret > 0
		{
			printf("[%s:%d]buf:%s\n", 
					inet_ntoa(client_addr.sin_addr), 
					ntohs(client_addr.sin_port), buf);
		}
	
	}

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

實(shí)現(xiàn)服務(wù)端client.c(復(fù)制服務(wù)端進(jìn)行改動(dòng))

#include "tcp.h"

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

	//檢查參數(shù)
	if(argc < 3)
	{
		fprintf(stderr, "%s <addr> <port>\n", argv[0]);
		exit(EXIT_FAILURE);
	}

	//創(chuàng)建套接字
	if((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		ErrExit("socket");

	//設(shè)置通信結(jié)構(gòu)體
	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);
	}
	
	//發(fā)起連接請求
	if(connect(fd,(Addr *)&addr, sizeof(addr)))
		ErrExit("bind");

	//發(fā)送數(shù)據(jù)
	while(1)
	{
		do 
		{
			ret = send(fd, buf, BUFSIZ, 0);
		}while(ret < 0 && errno == EINTR); //如果信號導(dǎo)致的錯(cuò)誤,繼續(xù)執(zhí)行
		if(ret < 0)
		{
			ErrExit("recv");
		}
		else if(!ret)  //ret = 0
		{
			break;
		}
		printf("send data:%s\n", buf);
        fflush(stdout);
		getchar();
	
	}

	close(fd);
	return 0;
}

最終實(shí)現(xiàn)效果,客戶端發(fā)送,服務(wù)端打印===test

lv8 嵌入式開發(fā) 網(wǎng)絡(luò)編程開發(fā) 21 私有云盤項(xiàng)目,嵌入式開發(fā),網(wǎng)絡(luò),linux

2.2 實(shí)現(xiàn)客戶端函數(shù)簡化

cloud_project_v1.1客戶端給服務(wù)端傳文件

主要工作:

  • 封裝客戶端socket創(chuàng)建過程的函數(shù),簡化代碼
  • 創(chuàng)建makefile

tcp.h

#ifndef _TCP_H_
#define _TCP_H_

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <stdlib.h>
#include <unistd.h>
#include <strings.h>
#include <arpa/inet.h>
#include <errno.h>

#define BACKLOG 5

#define ErrExit(msg) do { perror(msg); \
	exit(EXIT_FAILURE); } while(0)

typedef struct sockaddr Addr;
typedef struct sockaddr_in Addr_in;

void Argment(int argc, char *argv[]);
int SocketInit(char *argv[]);
#endif

tcp.c

#include "tcp.h"

void Argment(int argc, char *argv[]){
	if(argc < 3){
		fprintf(stderr, "%s <addr><port>\n", argv[0]);
		exit(EXIT_FAILURE);
	}
}

int SocketInit(char *argv[]){
	int fd;
	Addr_in addr;
	/*創(chuàng)建套接字*/
	if( (fd = socket(AF_INET, SOCK_STREAM, 0) ) < 0)
		ErrExit("socket");
	/*設(shè)置通信結(jié)構(gòu)體*/
	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);
	}
	/*發(fā)起連接請求*/
	if( connect(fd, (Addr *)&addr, sizeof(addr) ) )
		ErrExit("connect");
	return fd;
}

?client.c

#include "tcp.h"

int main(int argc, char *argv[])
{
	int fd;
	int ret;
	char buf[BUFSIZ] = {"===test==="};
	/*檢查參數(shù)*/
	Argment(argc, argv);

	fd = SocketInit(argv);

	/*發(fā)送數(shù)據(jù)*/
	while(1){
		do {
			ret = send(fd, buf, BUFSIZ, 0);
		}while(ret < 0 && errno == EINTR); //如果信號導(dǎo)致的錯(cuò)誤,繼續(xù)執(zhí)行
		if(ret < 0)
			ErrExit("recv");
		else if(!ret)
			break;
		printf("send data:%s", buf);
		fflush(stdout);
		getchar();
	}

	close(fd);
	return 0;
}

server.c文章來源地址http://www.zghlxwxcb.cn/news/detail-715313.html

#include "tcp.h"

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


	//檢查參數(shù)
	if(argc < 3)
	{
		fprintf(stderr, "%s <addr> <port>\n", argv[0]);
		exit(EXIT_FAILURE);
	}

	//創(chuàng)建套接字
	if((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		ErrExit("socket");

	//設(shè)置通信結(jié)構(gòu)體
	bzero(&addr, sizeof(addr));
    addr.sin_family = AF_INET;
	addr.sin_port = htons(atoi(argv[2]));
	if(inet_

到了這里,關(guān)于lv8 嵌入式開發(fā) 網(wǎng)絡(luò)編程開發(fā) 21 私有云盤項(xiàng)目的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包