• 大小: 10KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: tftp升级  

资源简介

该文档实现tftp文件的传输,文档中包括客户端与服务端的代码,供大家学习参考。

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include 
#include
#include 

#include 
#include 
#include 
#include 
#include   
#include 
#include  

#include “define.h“
#include “makepack.h“

int sock = -1;
char desthost[256] = “127.0.0.1“; //目的主机地址,默认为本机
int  filemode = TFTP_OCTET; //发送模式为octet

typedef void (* CMDFUNC)(char [][256]int pcount);

typedef struct _cmdnum{
char *cmd; //命令代码
int num; //序号
int paramcount; //参数个数
CMDFUNC callback; //回调函数名
}CMDNUM*PCMDNUM;

/*定义帮助文档*/
char *helptext = “help:     显示帮助信息\n\
connect dest_ip: 连接服务器\n\
exit: 退出程序\n\
get filename: 从服务器端下载文件\n\
put local_fname dest_fname: 向服务器上传文件\n“;

void showhelp (char cmd[][256]int pcount); //显示帮助信息
void connectto (char cmd[][256]int pcount); //连接目的主机
void quit (char cmd[][256]int pcount); //退出
void getfile (char cmd[][256]int pcount); //下载文件
void putfile (char cmd[][256]int pcount); //上传文件

/*定义一个存储回调函数的命令代码数组,其值与不同的命令相对应*/
CMDNUM cmdlist[] = {
{“help“   10showhelp}
{“connect“21connectto}
{“exit“   30quit}
{“get“    41getfile}
{“put“    52putfile} };

//分开输入的命令字符串得到命令代码及参数
int stripcmd(char *schar cmd[][256])
{
int i=0;
char *token=NULL;
char seps[] = “ \t\n“;
token = strtok( s seps ); /*断开命令与参数*/
while(token!=NULL){
if (i>2) break; /*因为回调函数的参数最多为3个,当识别出的参数多于2个时,忽略多于的*/ 
strcpy(cmd[i]token);
token = strtok( NULL seps );/*从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。
                            所有seps中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点*/
i++;
}
return i; 
}

//获取命令数组的下标
int  getcmdsubscript(char *s)
{
int i = 0;
for(i=0;i if(strcasecmp(scmdlist[i].cmd)==0){
return i;
}
}
return -1;  
}

//解析命令回调相应命令处理函数
void parsecmd(char *s)
{
char cmd[3][256];
int pcount = 0;
int subscript = -1;
pcount = stripcmd(scmd); /*分开命令与参数,返回值为参数的个数加1*/
subscript=getcmdsubscript(cmd[0]); /*获取下标*/
if(subscript==-1){
printf(“No such commond \n“);
return;
}
else{
cmdlist[subscript].callback(cmdpcount-1);/*根据命令回调相应的函数*/
}
}


int main(int argc char* argv[])
{
printf(“********************** Welcome! **********************\n\n\
                 This is a TFTP_client tool.\n\n“);
printf(helptext);   //显示帮助信息
printf(“******************************************************\n\n“);

char cmd[256];     //cmd存放接收进来的命令字符 
memset(cmd 0 sizeof(cmd));
struct sockaddr_in addr;
memset(&addr 0 sizeof(struct sockaddr_in));
    
    sock = socket(AF_INETSOCK_DGRAM0);
if(sock==-1)
{
printf(“创建SOCKET失败\n“);
exit(0);
}

while(1)
{
ff

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-09-02 10:07  tftp_test\
     目录           0  2016-09-02 10:10  tftp_test\client\
     文件         979  2016-07-13 14:33  tftp_test\client\define.h
     文件        1391  2009-09-04 10:10  tftp_test\client\makepack.h
     文件       13284  2016-09-02 10:10  tftp_test\client\tftpclient.c
     文件         285  2016-07-16 16:19  tftp_test\readMe.txt
     目录           0  2016-09-02 10:09  tftp_test\server\
     文件         980  2016-07-12 14:29  tftp_test\server\define.h
     文件       10523  2016-09-02 10:09  tftp_test\server\tftpServer.c

评论

共有 条评论

相关资源