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

杭州网站网络 科技公司怎样自己做淘宝客网站

杭州网站网络 科技公司,怎样自己做淘宝客网站,简搜网站提交,做网站一般做多大的目录 1.项目描述 2.函数准备 2.1 gets函数 2.2 popen函数、fread函数 2.3 access 函数 2.4 exit 函数 2.5 strtok 函数 2.6 chdir函数 3.项目代码 3.1服务器代码 3.2客户端代码 4.问题总结 1.项目描述 基于Soket聊天服务器#xff0c;实现服务器和客户端的文件传输。…目录 1.项目描述 2.函数准备 2.1 gets函数 2.2 popen函数、fread函数 2.3 access 函数 2.4 exit 函数 2.5 strtok 函数 2.6 chdir函数 3.项目代码 3.1服务器代码 3.2客户端代码 4.问题总结 1.项目描述 基于Soket聊天服务器实现服务器和客户端的文件传输。 Linux系统下建立Socket聊天服务器_趣知boy的博客-CSDN博客 ls   获取服务器文件列表 pwd 获取服务器当前路径 cd 对服务器目录的操作 dir quit 退出连接 put 上传文件到服务器 file_name get 获取服务器数据 file_namelcd 对客户端目录的操作 dir lls 列出客户端所有文件 dofile 创建文件 项目结构 2.函数准备 2.1 gets函数 gets 从标准输入流通常是键盘读取一行字符串并将其存储在指定的字符数组中。 其比较重要的一个功能是阻塞 printf(请输入您的姓名);gets(name);printf(您的姓名是%s\n, name); 2.2 popen函数、fread函数 size_t fread(void *ptr, size_t size, size_t count, FILE *stream); 该函数可以读取指定数量count 1的元素每个元素的大小为size个字节从指定文件stream中读取到内存指针ptr所指的位置。  2.3 access 函数 用于判断文件或目录是否具有某种权限。 int access(const char *pathname, int mode); F_OK检查文件是否存在 R_OK检查读权限是否存在 W_OK检查写权限是否存在 X_OK检查执行权限是否存在 返回值 如果路径名指定的文件或目录具有所需的权限则返回0。 如果权限不足则返回-1并且errno设置为适当的错误码 2.4 exit 函数 exit函数是一个用于终止程序运行的函数。当调用exit函数时程序将立即退出并返回到操作系统。 2.5 strtok 函数 char *strtok(char *str, const char *delim); 其中str是要进行分割的字符串delim是作为分隔符的字符串。函数返回一个指向被分割出的子字符串的指针。 strtok函数陷阱会改变指针指向的字符串所以想保留原来str需要用strcpy复制出来处理。 token strtok(str, ,); while (token ! NULL) {printf(%s\n, token);token strtok(NULL, ,); }return 0; 执行上述代码会输出以下结果 Hello World This is Strtok 2.6 chdir函数 更改当前工作目录 int chdir(const char *path); 参 数Path 目标目录可以是绝对目录或相对目录。 返回值成功返回0 失败返回-1 3.项目代码 3.1服务器代码 #include stdio.h #include unistd.h #include stdlib.h #include sys/types.h #include sys/socket.h #include string.h #include ctype.h #include arpa/inet.h #include config.h #include sys/types.h #include sys/stat.h #include fcntl.hstruct Msg msg; int ss_fd;void handler_cmd(char *cmd){int cmd_int,fd;char *p;FILE *file;char *cmd_precmd;//handle the cmd to numberif(!strcmp(cmd_pre,ls)) cmd_intls;if(!strcmp(cmd_pre,pwd)) cmd_intpwd; if(!strcmp(cmd_pre,quit)) cmd_intquit;if(!strcmp(cmd,lls)) cmd_intlls;if(strstr(cmd,lcd)!NULL) cmd_intlcd;if(strstr(cmd_pre,cd)!NULL) cmd_intcd;if(strstr(cmd_pre,put)!NULL) cmd_intput;if(strstr(cmd_pre,get)!NULL) cmd_intget;//handle cmd switch(cmd_int){case ls:case pwd:filepopen(cmd,r);fread(msg.data,sizeof(msg.data),1,file);printf(%s,msg.data);write(ss_fd,msg,sizeof(msg));break;case cd:pstrtok(cmd, );pstrtok(NULL, );printf(dir:%s \r\n,p);strcpy(msg.data,change dir over \r\n);write(ss_fd,msg,sizeof(msg)); //must give a msg backchdir(p);break;case get:pstrtok(cmd, );pstrtok(NULL, );printf(dir:%s \r\n,p); if(!access(p,F_OK)){ //if have this filemsg.flagdofile;fdopen(p,O_RDONLY);read(fd,msg.data,sizeof(msg.data));send(ss_fd,msg,sizeof(msg),0);close(fd);}else{ //if no this filesend(ss_fd,no this file \r\n,16,0);}break;case put:pstrtok(cmd, );pstrtok(NULL, );printf(dir:%s \r\n,p);fdopen(p,O_RDWR|O_CREAT,0666);write(fd,msg.data,strlen(msg.data));close(fd);strcpy(msg.data,i have got a file.\r\n);write(ss_fd,msg,sizeof(msg)); //must give a msg backbreak;case quit:msg.flagquit;printf(quit\r\n);exit(-1);}}int main(void) {int s_fd,nread,len;struct sockaddr_in s_ddr; //build server msgstruct sockaddr_in c_ddr; //save clinet msgs_fd socket(AF_INET, SOCK_STREAM, 0);//1.build a soket specifiedif(s_fd-1){perror(error is);}//2.build all binds_ddr.sin_familyAF_INET;s_ddr.sin_porthtons(8880);s_ddr.sin_addr.s_addrhtonl(INADDR_ANY);//give the bindbind(s_fd,(struct sockaddr *)s_ddr,sizeof(s_ddr));//3.waite for clientlisten(s_fd,8);//4.accept come and connect for oncelensizeof(c_ddr);while(1){ss_fdaccept(s_fd,(struct sockaddr *)c_ddr,len);if(ss_fd -1){perror(accept:);}printf(conect succese!\r\n);//5.read from connect ss_fdif(fork()0){ //creat kid pid for handler msg and cmd //5.2 read while(1){memset(msg,\0,sizeof(msg)); //clear msgprintf(\r\n);nreadread(ss_fd,msg,sizeof(msg));if(nread0){ // cannot recv cmd printf(connect is cutdon! \r\n);break;}else{ //can recive cmd printf(server receved cmd:%s \r\n,msg.cmd); printf(\r\n);handler_cmd(msg.cmd); //hander the cmd give msg data }}}}close(ss_fd);close(s_fd);return 0; } 3.2客户端代码 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include sys/socket.h #include netinet/in.h #include config.h #include sys/types.h #include sys/stat.h #include fcntl.hint cmd_to_number(char *cmd) {if(!strcmp(cmd,ls)) return ls;if(!strcmp(cmd,pwd)) return pwd; if(!strcmp(cmd,quit)) return quit;if(!strcmp(cmd,lls)) return lls;if(strstr(cmd,lcd)!NULL) return lcd;if(strstr(cmd,cd)!NULL) return cd;if(strstr(cmd,put)!NULL) return put;if(strstr(cmd,get)!NULL) return get;return -1;}int handler_cmd(struct Msg msg, int s_fd) {//handle cmd int fd,n_read; char p_pre[12];char *pNULL;int retcmd_to_number(msg.cmd);switch(ret){case ls:case pwd:case cd:send(s_fd,msg,sizeof(msg),0);break;case get:send(s_fd,msg,sizeof(msg),0);break;case put:strcpy(p_pre,msg.cmd);printf(dir:%s \r\n,p_pre);pstrtok(p_pre, );pstrtok(NULL, ); //get file_name printf(dir:%s \r\n,p);if(!access(p,F_OK)){ //if have this filefdopen(p,O_RDONLY);n_readread(fd,msg.data,1024);if(n_read1024){printf(file over 1024! faild! \r\n);} send(s_fd,msg,sizeof(msg),0);memset(msg.data,0,1024);printf(client put cmd is: %s \r\n,msg.cmd);close(fd);}else{ //if no this filesend(s_fd,no this file,16,0);}break; case lls:system(ls);break;case lcd:strcpy(p_pre,msg.cmd);pstrtok(p_pre, );pstrtok(NULL, ); //get file_printf(dir:%s \r\n,p);chdir(p);break;case quit:send(s_fd,msg,sizeof(msg),0);close(s_fd); exit(-1);}return ret; } void handle_server_msg(struct Msg msg,int s_fd) {int n_read,fd;char *p;struct Msg recv_msg; //this is new msg use it becase need pre msg cmdn_readread(s_fd,recv_msg,sizeof(recv_msg)); //while blockif(n_read0){printf(\r\n server is outline! );exit(-1);}if(recv_msg.flag dofile){pstrtok(msg.cmd, );pstrtok(NULL, ); //get file_name fdopen(p,O_RDWR|O_CREAT,0666);printf(creat the file\r\n);write(fd,recv_msg.data,strlen(recv_msg.data));close(fd);putchar();fflush(stdout);}else{ //normal direct cmdprintf(--------------------\r\n);printf(%s ,recv_msg.data);printf(--------------------);putchar();fflush(stdout);}}int main(int argc,char *argv[]) {int flag,s_fd,n_read,ret;struct sockaddr_in c_ddr;struct Msg msg;//1.build sockets_fdsocket(AF_INET,SOCK_STREAM,0);//2.0 prepare server addrmemset(c_ddr,0,sizeof(c_ddr)); //clear c_ddrc_ddr.sin_familyAF_INET;c_ddr.sin_porthtons(8880);inet_aton(127.0.0.1,c_ddr.sin_addr);//2.connect server get s_fdif(connect(s_fd,(struct sockaddr *)c_ddr,sizeof(c_ddr))-1){perror(error);exit(-1);}printf(connect success\r\n);while(1){//1.get cmd form keyborad and handle cmd to servermemset(msg,0,sizeof(msg));printf(\r\n );gets(msg.cmd);int rethandler_cmd(msg,s_fd);//2.handle the msg form serverif(ret-1){printf(no this cmd!\r\n );fflush(stdout);continue;}if(ret5 || ret6){printf(client cmd!\r\n );fflush(stdout);continue;} handle_server_msg(msg,s_fd);}close(s_fd);return 0; } 4.问题总结 在put 发送文件中当文件大小超过给定字节就会溢出导致整个结构体崩坏破坏cmd。 思考除了加大给定字节大小还有其它办法吗strcpy是怎么实现的read函数陷阱read函数读的字节小于fd文件字节会崩坏buf里的数据。strtok函数会破坏使用的字符串要保留原来字符串需要strcpy复制出来处理。本地命令不用服务器处理的命令ret5ret6不要进入hanle_server_msg用recv函数阻塞
http://www.pierceye.com/news/80137/

相关文章:

  • 龙岩网站建设大概费用免费的网站平台有哪些
  • 有没有做任务给钱的网站河南郑州建网站公司
  • 科技广告公司网站建设做广告的软件app免费
  • 公司网站如何做分录windows挂wordpress
  • 网站模板缺少文件怎么办.tel域名不可以做网站域名吗
  • 德尔普网络做网站怎么样wordpress 主题 排行榜
  • 智能小程序是什么网站seo优化方案设计
  • 网站开发合同及报价企业网站开发工资
  • 商城网站定制怎么做网站建设有哪些软件
  • 房地产设计公司seo网络优化是什么工作
  • 山西网站建设网站wordpress 自定义字段
  • 网站为什么吸引人wordpress免费商城模板
  • 做的网站电脑上跟手机上不一样怎样做网站平台赚钱吗
  • 移动商城网站开发选择做网站服务器空间
  • 四川建设公司网站湖南建设监理报名网站
  • 网页设计的流程是什么百度seo wordpress插件
  • 微信群公告如何做网站链接建设网站政策风险
  • 最专业的礼品网站案例参考重庆专业网站推广时间
  • 中国十大知名网站鞍山抖音seo新闻
  • dede网站禁止ip访问品牌宣传的推广
  • 投标网站建设扬州市住房建设局网站
  • 库车网站建设网站网址怎么写
  • 电子商务网页与网站设计网站建设需求网
  • 提高网站权重东莞纸箱厂东莞网站建设
  • 沈阳公司网站设计制作音乐主题资源网站建设
  • 微网站是免费的吗北京便宜网站建设
  • 如何查询网站后台地址下饶网站建设
  • 营销型 展示类网站模板在线设计海报的网站
  • 园林建设网站个人主页设计模板
  • 忻州网站建设求职简历剪辑课程哪里培训最好