⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.h~

📁 简单ftp协议实现
💻 H~
字号:
#ifndef __COMMON_H#define __COMMON_H#include <sys/socket.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <signal.h>#include <netdb.h>#include <linux/sockios.h>#include <sys/ioctl.h>#include <linux/if.h>#include <dirent.h>#include <sys/stat.h>#include <pwd.h>#include <grp.h>#include <time.h>#include <string.h>#include <pthread.h>#define TELNET_LENGTH 512#define	LISTEN_PORT 2379int one (const struct dirent *unused){	  return 1;}void parse_parameters(char *cmd, int pn, char *out){  out[0] = '\0';  int space_begin,space_num,param_end;  space_num = 0;  for( space_begin = 0; space_begin < strlen(cmd); space_begin++)    {      if(cmd[space_begin] == ' ' && cmd[space_begin+1]!= '-')	space_num ++;      if(space_num == pn)	{	  param_end = space_begin+1;	  while(cmd[param_end]!=' ' && cmd[param_end]!='\r' && cmd[param_end]!= '\0')	    param_end++;	  strncpy(out,cmd+space_begin+1,param_end-1-space_begin);	  out[param_end-1-space_begin]='\0';	  return;	}    }}void check_error(int handle, char *message){  if (handle<0)    {      if (message!=NULL) perror(message);      exit(EXIT_FAILURE);    }}void send_telnt(char* buff, int len, int dsock){	  buff[len++] = '\r';  buff[len++] = '\n';  int h = 0;  do    {      h = send(dsock, buff, len, 0);      check_error(h, "send");      len -= h;      buff += h;    }while (len>0);}void send_command(char *buff, int dsock){  printf("\033[1;33m%s\033[m\n", buff);  send_telnt(buff, strlen(buff), dsock);}void send_data(char *buff, int len, int dtsock){  int h = 0;  do    {      h = send(dtsock, buff, len, 0);      check_error(h, "send data");      len -= h;      buff += h;    }while (len>0);}void receive_data(int dtsock){  int h = 0;  char buff[TELNET_LENGTH];  while ((h=recv(dtsock, buff, TELNET_LENGTH, 0))>0)    {      buff[h] = '\0';      printf("%s", buff);    }}		void send_file(FILE *fl, int dtsock){  int h;  int i;  char buff[TELNET_LENGTH];  while ( (h=fread(buff, 1, TELNET_LENGTH, fl))>0 )    {      send_data(buff,h,dtsock);    }}void receive_file(FILE *fl, int dtsock){  int h;  char buff[TELNET_LENGTH];  int total = 0;  while ( (h=recv(dtsock, buff, TELNET_LENGTH, 0)) > 0)    {      fwrite(buff, 1, h, fl);      total += h;    }  printf("[Fancy FTP]Receive %d bytes\n", total);}char default_string[][512] = {  "220 Fancy FTP Server Ready...",  "250 pathname created.",  "221 Goodbye!",  "500 Syntax error.",  "226 Close data connection.",  "331 User name okay, need password.",  "230-\r\nUser logged in, proceed.\r\n************************\r\nWelcome to Fancy's ftpd!!!\r\n**********************\r\n230 fancy9:)",  "530 Not logged in.",  "200 Command okay.",  "502 Comand not Supported.",  "215 UNIX Type: L8",  "227 Enter Passive Mode.",  "150 Opening ASCII mode data connection.",  "214 HELP",  "DUMMY"};enum reply_num{	R220, R250, R221, R500, R226, R331, R230, R530, R200, R502, R215, R227, R150, R214, R999};void reply(enum reply_num num, char *message, int dsock){  char buff[256];  int len;  if (message==NULL)    {      len = strlen(default_string[num]);      strcpy(buff, default_string[num]);    }  else    {      strcpy(buff, message);      len = strlen(message);    }  send_telnt(buff,len,dsock);}int receive_command(char *buff, int maxlen, int dsock){  char *p = buff;  int l = 0, rl;  while ((rl = recv(dsock, p, maxlen - l, 0))>0)    {      if (rl==0) break;      while (rl>0 && ((*p)!='\r' || (*(p+1))!='\n'))	{	  l ++;	  p ++;	  rl --;	}      if (rl>0) break;    }  *(p+2) = '\0';  return l+2;}int deal_rpl_buff(char  temp[256][TELNET_LENGTH], int maxlen, int dsock){  int templen = 0;  int rl;  int flag = 0;  int islong = 0;  int r;  int sign;  char p[TELNET_LENGTH];  char * begin;  char * end;  do    {      check_error(255-templen, "reply too much");      rl = recv(dsock, p, maxlen, 0);      begin =p;      end = p;      //printf("======%s\n",begin);      do	{	  while((end -p < rl -1 ) && !((*end) == '\r' && (*(end+1)) == '\n' ))	    {	      end ++;	    }	  if(!flag)	    {	      strncpy(temp[templen],begin,end - begin +2);	      temp[templen][end-begin+3] = '\0';	      //printf("---------%s\n",temp[templen]);	      templen++;	    }	  else	    {	      flag = 0;	      int len = strlen(temp[templen -1]);	      strncat(temp[templen - 1],begin,end - begin +2);	      temp[templen -1][len + end - begin + 3] = '\0';	      printf("+++++++++++++%s\n",temp[templen - 1]);	    }	  begin = end + 2;	  end = begin; 	}      while(end - p < rl);      if((rl == TELNET_LENGTH)&&!( p[TELNET_LENGTH-1] == '\n'&& p[TELNET_LENGTH-2] == '\r' ))	flag = 1;      else	flag = 0;            if ( temp[0][3]=='-')	{	  r = (temp[0][0]-'0')*100 + (temp[0][1]-'0')*10 + (temp[0][2]-'0');	 	  islong = 1;	}      sign = (temp[templen -1][0]-'0')*100+(temp[templen -1][1]-'0')*10+(temp[templen -1][2]-'0');      //printf("rrrrrrrrrrrrr%d\n",(temp[templen -1][0]-'0')*100+(temp[templen -1][1]-'0')*10+(temp[templen -1][2]-'0'));    }  while(flag || ( islong && ( templen == 1 || (sign !=r) ) ) );  return templen;}int receive_reply(char *buff, int maxlen, int dsock){  int r;  int flag = 0;  char temp[256][TELNET_LENGTH] = {"\0"};  int templen = deal_rpl_buff(temp, maxlen, dsock);  int i;  //  printf("============%d\n",templen);  for(i = 0; i < templen; i++)    {      printf("\033[1;34m%s\033[m", temp[i]);    }  strcpy(buff, temp[0]);  //  do  //{  //  receive_command(temp, maxlen, dsock);  //  printf("\033[1;34m%s\033[m", buff);  //  if (!flag && buff[3]=='-')  //{  //  flag = 1;  //  r = (buff[0]-'0')*100 + (buff[1]-'0')*10 + (buff[2]-'0');  //}  //  }while (flag && (buff[3]=='-' || ( (buff[0]-'0')*100+(buff[1]-'0')*10+(buff[2]-'0')!=r) ));  return 0;}void permission(unsigned int mode, char *buff){	strcpy(buff,"----------");	buff[0] = S_ISDIR(mode)?'d':'-';	buff[1] = (mode&S_IRUSR)==S_IRUSR?'r':'-';	buff[2] = (mode&S_IWUSR)==S_IWUSR?'w':'-';	buff[3] = (mode&S_IXUSR)==S_IXUSR?'x':'-';	buff[4] = (mode&S_IRGRP)==S_IRGRP?'r':'-';	buff[5] = (mode&S_IWGRP)==S_IWGRP?'w':'-';	buff[6] = (mode&S_IXGRP)==S_IXGRP?'x':'-';	buff[7] = (mode&S_IROTH)==S_IROTH?'r':'-';	buff[8] = (mode&S_IWOTH)==S_IWOTH?'w':'-';	buff[9] = (mode&S_IXOTH)==S_IXOTH?'x':'-';}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -