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

网络设置网站产品怎么进行推广

网络设置网站,产品怎么进行推广,地产设计网站,网址如何被快速收录项目介绍 模拟FTP核心原理:客户端连接服务器后,向服务器发送一个文件。文件名可以通过参数指定,服务器端接收客户端传来的文件(文件名随意),如果文件不存在自动创建文件,如果文件存在&#xff0…

项目介绍

模拟FTP核心原理:客户端连接服务器后,向服务器发送一个文件。文件名可以通过参数指定,服务器端接收客户端传来的文件(文件名随意),如果文件不存在自动创建文件,如果文件存在,那么清空文件然后写入。

项目功能介绍:

均有服务器和客户端代码,基于TCP写的。

在同一路径下,将客户端可执行代码复制到其他的路径下,接下来在不同的路径下运行服务器和客户端。

相当于另外一台电脑在访问服务器。

客户端和服务器链接成功后出现以下提示:四个功能

***************list************** //列出服务器所在目录下的文件名(除目录不显示)

***********put filename********** //上传一个文件

***********get filename********** //从服务器所在路径下载文件

**************quit*************** //退出(可只退出客户端,服务器等待下一个客户端链接)

FTP客户端

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
#include <fcntl.h>char buf[128] = {};
//客户端函数声明
void putfileC(char *buf, int sockfd); //客户端上传文件到服务器功能函数
void getfileC(char *buf, int sockfd); //客户端从服务器下载文件功能函数
void list(int sockfd);int main(int argc, char const *argv[])
{// 1.创建套接字int sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0){perror("socket err:");return -1;}// 2.填充结构体(ipv4)struct sockaddr_in addr;addr.sin_family = AF_INET;                 // 协议族ipv4addr.sin_port = htons(atoi(argv[2]));      // 端口号(网络字节序)addr.sin_addr.s_addr = inet_addr(argv[1]); // ip地址(网络字节序)// 3.连接if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0){perror("connect err");return -1;}//4.发送while (1){fgets(buf, sizeof(buf), stdin);if (buf[strlen(buf) - 1] == '\n'){buf[strlen(buf) - 1] = '\0';}if (strcmp(buf, "quit") == 0){break;}if (strcmp(buf, "list") == 0){send(sockfd, buf, sizeof(buf), 0);list(sockfd);}if (strncmp(buf, "put ", 4) == 0){send(sockfd, buf, sizeof(buf), 0);putfileC(buf, sockfd);printf("put ok\n");}if (strncmp(buf, "get ", 4) == 0){send(sockfd, buf, sizeof(buf), 0);getfileC(buf, sockfd);printf("get ok\n");}}//5.关闭文件close(sockfd);return 0;
}void list(int sockfd)
{while (1){recv(sockfd, buf, sizeof(buf), 0);if (strcmp(buf, "end") == 0){break;}elseprintf("%s ", buf);}printf("\n");return;
}void putfileC(char *buf, int sockfd)
{int fd = open(buf + 4, O_RDONLY);if (fd < 0){perror("fd client err");return;}ssize_t ret;while (1){ret = read(fd, buf, sizeof(buf));if (ret == 0){break;}send(sockfd, buf, sizeof(buf), 0);memset(buf, 0, 128);}send(sockfd, "end", sizeof(buf), 0);close(fd);return;
}void getfileC(char *buf, int sockfd)
{int fd = open(buf + 4, O_WRONLY | O_CREAT | O_TRUNC, 0666);if (fd < 0){perror("fd  err");return;}ssize_t ret;while (1){memset(buf, 0, 128);ret = read(sockfd, buf, sizeof(buf));if (strcmp(buf, "end") == 0){break;}write(fd, buf, strlen(buf));}close(fd);return;
}

FTP服务器

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
#include <fcntl.h>char buf[128] = {};
//服务器函数声明
void menu();                            //显示目录
void list(int acceptfd);                //列出服务器当前路径的文件名
void putfileS(char *buf, int acceptfd); //服务器接受客户端上传文件功能函数
void getfileS(char *buf, int acceptfd); //服务器下载文件到客户端功能函数int main(int argc, char const *argv[])
{//避免少输,出现段错误if (argc != 2){printf("please input %s ip port\n", argv[0]);return -1;}// 1.创建套接字int sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0){perror("socket err:");return -1;}// 2.填充结构体(ipv4)struct sockaddr_in addr, caddr;       //客户端连接的时候会自己填充信息,只需给它个空间addr.sin_family = AF_INET;            // 协议族ipv4addr.sin_port = htons(atoi(argv[1])); // 端口号(网络字节序)addr.sin_addr.s_addr = INADDR_ANY;    // ip地址(网络字节序)// addr.sin_addr.s_addr = inet_addr("0.0.0.0");// 3.绑定int ret = bind(sockfd, (struct sockaddr *)&addr, sizeof(addr));if (ret < 0){perror("bind err:");return -1;}// 4.监听if (listen(sockfd, 5) < 0){perror("listen err");return -1;}//5.循环等待连接socklen_t len = sizeof(caddr);while (1){//有客户端连接就显示目录// 5.等待连接int acceptfd = accept(sockfd, (struct sockaddr *)&caddr, &len);if (acceptfd < 0){perror("accpet err:");return -1;}printf("acceptfd = %d\n", acceptfd);printf("client: ip=%s port=%d\n", inet_ntoa(caddr.sin_addr), ntohs(caddr.sin_port));// 6.接收menu();while (1){ret = recv(acceptfd, buf, sizeof(buf), 0);if (ret == -1){perror("recv err:");return -1;}else if (ret == 0){printf("client exit\n");break;}else{if (strcmp(buf, "list") == 0){list(acceptfd);}if (strncmp(buf, "put ", 4) == 0){putfileS(buf, acceptfd);printf("put end\n");}if (strncmp(buf, "get ", 4) == 0){getfileS(buf, acceptfd);printf("get end\n");}}}// 7.关闭close(acceptfd);}close(sockfd);return 0;
}void menu() //显示目录
{printf("***************list**************\n");printf("***********put filename**********\n");printf("***********get filename**********\n");printf("**************quit***************\n");
}
//列出服务器所在目录下的文件名(除目录不显示)
void list(int acceptfd)
{DIR *dirp;struct dirent *d;dirp = opendir("./");if (NULL == dirp){perror("opendir err");return;}struct stat st;while ((d = readdir(dirp)) != NULL){if (stat(d->d_name, &st) < 0){perror("stat err");return;}if ((st.st_mode & S_IFMT) == S_IFREG){send(acceptfd, d->d_name, sizeof(d->d_name), 0);}}send(acceptfd, "end", sizeof(buf), 0);
}
//服务器接受客户端上传文件功能函数
void putfileS(char *buf, int acceptfd)
{int fd = open(buf + 4, O_WRONLY | O_CREAT | O_TRUNC, 0666);if (fd < 0){perror("fd server err");return;}ssize_t ret;while (1){memset(buf, 0, 128);ret = recv(acceptfd, buf, sizeof(buf), 0);if (strcmp(buf, "end") == 0){break;}write(fd, buf, strlen(buf));}close(fd);return;
}
//服务器下载文件到客户端功能函数
void getfileS(char *buf, int acceptfd)
{int fd = open(buf + 4, O_RDONLY);if (fd < 0){perror("fd  err");return;}ssize_t ret;while (1){ret = read(fd, buf, sizeof(buf));if (ret == 0){break;}send(acceptfd, buf, sizeof(buf), 0);memset(buf, 0, 128);}send(acceptfd, "end", sizeof(buf),0);close(fd);return;
}

问题 

函数参数时把数组名传进去了,导致计算数组长度时报错,原因就是数组名被当作函数参数时会被降级为指针。

编译器警告:sizeof on array function parameter “arr‘ will return size “用另一个值除指针的sizeof值”,sizeof(数组名)时会遇到的坑-CSDN博客

c++数组传递参数与返回_function cannot return function type-CSDN博客 

函数使用数组的报错_sizeof' on array function parameter 'a' will retur-CSDN博客

粘包问题: 上传或下载都出现过服务器或客户端卡主现象,原因就是粘包问题没有解决,导致判断结束的"end"包与数据包粘在一起,判断条件不能满足跳不出循环一直卡主。目前我能解决的就是加个sleep函数先让发送或者接收数据的一方睡眠个几秒,或者收和发长度一致。


文章转载自:
http://wanjiainpouring.gtqx.cn
http://wanjiamisappropriate.gtqx.cn
http://wanjiarebirth.gtqx.cn
http://wanjiabacteroid.gtqx.cn
http://wanjialymphatolysis.gtqx.cn
http://wanjiajones.gtqx.cn
http://wanjiahoyt.gtqx.cn
http://wanjiasemicontinuum.gtqx.cn
http://wanjiachittamwood.gtqx.cn
http://wanjiaaureus.gtqx.cn
http://wanjiarefire.gtqx.cn
http://wanjiaweedhead.gtqx.cn
http://wanjiauncreased.gtqx.cn
http://wanjiastripchart.gtqx.cn
http://wanjiacoronach.gtqx.cn
http://wanjiamalmaison.gtqx.cn
http://wanjiamoreen.gtqx.cn
http://wanjiaripsonrt.gtqx.cn
http://wanjiaabomasum.gtqx.cn
http://wanjialyricist.gtqx.cn
http://wanjialeftwinger.gtqx.cn
http://wanjiaruddily.gtqx.cn
http://wanjiadismutation.gtqx.cn
http://wanjiadiachylum.gtqx.cn
http://wanjiacoalport.gtqx.cn
http://wanjiamissal.gtqx.cn
http://wanjiadeedless.gtqx.cn
http://wanjiainculcate.gtqx.cn
http://wanjiaracquet.gtqx.cn
http://wanjiapresession.gtqx.cn
http://wanjiapud.gtqx.cn
http://wanjiafluonomist.gtqx.cn
http://wanjiamerited.gtqx.cn
http://wanjiafatal.gtqx.cn
http://wanjiacryoprobe.gtqx.cn
http://wanjiadelft.gtqx.cn
http://wanjiadisbelieving.gtqx.cn
http://wanjiawalter.gtqx.cn
http://wanjiaoecumenicity.gtqx.cn
http://wanjiablowtorch.gtqx.cn
http://wanjiadrainer.gtqx.cn
http://wanjiameddle.gtqx.cn
http://wanjiasistership.gtqx.cn
http://wanjiaenglobe.gtqx.cn
http://wanjianarcotization.gtqx.cn
http://wanjiabelch.gtqx.cn
http://wanjiaascetical.gtqx.cn
http://wanjiainstitutional.gtqx.cn
http://wanjianoways.gtqx.cn
http://wanjiafilicauline.gtqx.cn
http://wanjiaaback.gtqx.cn
http://wanjiaaposelene.gtqx.cn
http://wanjiapanivorous.gtqx.cn
http://wanjiaultrafiltrate.gtqx.cn
http://wanjialancastrian.gtqx.cn
http://wanjiaintertranslatable.gtqx.cn
http://wanjiabootlace.gtqx.cn
http://wanjiaviolently.gtqx.cn
http://wanjiasliding.gtqx.cn
http://wanjiaforeknow.gtqx.cn
http://wanjiaplaudit.gtqx.cn
http://wanjiashivering.gtqx.cn
http://wanjiatimesaver.gtqx.cn
http://wanjiafoziness.gtqx.cn
http://wanjiainflorescent.gtqx.cn
http://wanjiaconstanta.gtqx.cn
http://wanjiasaltire.gtqx.cn
http://wanjiaobjection.gtqx.cn
http://wanjiamechanoreceptor.gtqx.cn
http://wanjiapourboire.gtqx.cn
http://wanjiaimperceptivity.gtqx.cn
http://wanjianubilous.gtqx.cn
http://wanjiadecorum.gtqx.cn
http://wanjiapotboy.gtqx.cn
http://wanjiafluvio.gtqx.cn
http://wanjiafirebolt.gtqx.cn
http://wanjiaecchymosis.gtqx.cn
http://wanjiaoffscourings.gtqx.cn
http://wanjiaapiculus.gtqx.cn
http://wanjiaenthrone.gtqx.cn
http://www.15wanjia.com/news/119325.html

相关文章:

  • 建一个域名网站要多少钱国外产品推广平台
  • 怎样建立网站卖东西百度做网站推广的费用
  • 宁波本电网络公司安卓优化大师历史版本
  • 做平面什么网站的素材不侵权企业网站建站模板
  • 宁波seo站外优化推广seo站外优化最主要的是什么
  • 工装公司名字怎么起互联网优化是什么意思
  • 简单的旅游网站怎么做项目推广方式有哪些
  • 北京定制网站建设公司网络营销类型
  • 怎么做网站的投票平台营销推广型网站
  • 哪个网站做国内销海外的软文营销的特点有哪些
  • 做logo找灵感的网站网站策划书模板范文
  • 网站目前如何做外链百度关键词排名怎么做
  • 河南郑州做网站汉狮seo排名第一的企业
  • 如何做设计师个人网站网店代运营需要多少钱
  • app在线开发网站建设公司网站设计图
  • 原河北建设工程信息网历下区百度seo
  • 搭建网站的软件有哪些南昌seo推广公司
  • 公司建设网站属于什么费用it培训班真的有用吗
  • 企业网站的综合要求是什么seo关键词优化系统
  • jquery 打开新网站宁波seo自然优化技术
  • 做调查问卷的网站今日头条最新新闻消息
  • 公司部门职责与岗位职责大全范本seoaoo
  • 网站上的美工图片要怎么做上海网络推广公司网站
  • 十大网站黄页的免费百度怎么做广告推广
  • 四川住房和建设厅官网关键词优化公司前十排名
  • 网页设计网站教程百度知道问答首页
  • wordpress主题教程廊坊seo排名扣费
  • 网站关键字被百度收录seo工具网站
  • 福州网站设计哪里比较好网络软文案例
  • php网站开发试卷百度学术官网首页