主要功能:

1. 上传文件到服务器

2. 从服务器上下载文件

3. 列出服务器上的文件

/*************************************************************************> File Name: server.c> Author: 联合作战实验室> Mail: v.manstein@qq.com> Created Time: Sat 25 Mar 2017 16:55:10 PM CST************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>#define err_log(errlog)  do{printf("%s:%s,%d\n", __FILE__, __func__, __LINE__);\perror(errlog);exit(1);}while(0)
#define  N 128// ./server  192.168.8.211 10001
int process_list(int acceptfd)
{DIR * dir;struct dirent *dirp;char buf[N] = {};if((dir = opendir(".")) == NULL){err_log("Failed to opendir");}while((dirp = readdir(dir))){if(dirp->d_name[0] == '.'){continue;}strcpy(buf,dirp->d_name);send(acceptfd, buf, N, 0);usleep(50);}close(acceptfd);printf("List done.\n");return 0;
}int process_get(int acceptfd, char * filename)
{char buf[N] = {};int fd;int nbyte;// G filenamefd = open(filename, O_RDONLY);if(fd < 0){if(errno == ENOENT){strcpy(buf, "N");send(acceptfd, buf, N, 0);}else {err_log("failed to open");}}else{strcpy(buf, "Y");send(acceptfd, buf, N, 0);}while((nbyte = read(fd, buf, N)) > 0){send(acceptfd, buf, nbyte, 0);usleep(50);}close(fd);close(acceptfd);return 0;
}int process_put(int acceptfd, char * filename)
{char buf[N] = {};int fd;int nbyte;// G filenamefd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0664);if(fd < 0){err_log("failed to open");}while((nbyte = recv(acceptfd, buf, N, 0)) > 0){write(fd, buf, nbyte);  }close(fd);close(acceptfd);return 0;
}int main(int argc, const char *argv[])
{int sockfd;int acceptfd;struct sockaddr_in serveraddr, clientaddr;socklen_t addrlen = sizeof(struct sockaddr_in);char buf[N] = {};if(argc < 3){fprintf(stderr,"Usage:%s serverip port.\n", argv[0]);return -1;}if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){err_log("failed to socket");}serveraddr.sin_family = AF_INET ;serveraddr.sin_addr.s_addr = inet_addr(argv[1]) ;serveraddr.sin_port = htons(atoi(argv[2]));if(bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0){err_log("Failed to bind.");}if(listen(sockfd, 5) < 0){err_log("Failed to listen");}while(1){if((acceptfd = accept(sockfd, (struct sockaddr *)&clientaddr, &addrlen)) < 0){err_log("Failed to accept");}printf("acceptfd:%d  --> %s %d\n", acceptfd, inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));// L , G filename , P filenameif(recv(acceptfd, buf, N, 0) < 0){err_log("Failed to recv.");}switch(buf[0]){case 'L':process_list(acceptfd);break;case 'G':process_get(acceptfd, buf+2);break;case 'P':process_put(acceptfd, buf+2);break;default:printf("Invalid cmd.\n");}}close(sockfd);close(acceptfd);return 0;
}

山寨版tftp服务器相关推荐

  1. linux centos 安装配置tftp服务器

    PC机系统:Win7  虚拟机linux系统:centosx86 1.tftp概论 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一 ...

  2. 【嵌入式开发】嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11)

    作者 : 万境绝尘 博客地址 : http://blog.csdn.net/shulianghan/article/details/42254237 一. 相关工具下载 嵌入式开发工具包 : -- 下 ...

  3. linux 指令tftp传输文件_Linux tftp命令使用详解:在本机与tftp服务器之间使用TFTP协议传输文件...

    tftp命令用在本机和tftp服务器之间使用TFTP协议传输文件. TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现.嵌入式linux的tftp开发环境包括两个方面:一是linux服 ...

  4. 八、TFTP服务器搭建及应用

    一.什么是TFTP TFTP简单文件传输协议,是一个基于UDP 协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大.不复杂的应用场合 TFTP 协议专门为小文件传输而设计,只能从 ...

  5. tftp服务器_Transfer for Mac(TFTP服务器)

    小编给大家带来了一个超棒的TFTP服务器程序.Transfer Mac版适用于Mac的简单可靠的TFTP服务器.Transfer for Mac是一种可靠且完全符合RFC的TFTP服务器应用程序.Ma ...

  6. tftp c++ 上传_如何在 Fedora 上建立一个 TFTP 服务器

    TFTP 即简单文本传输协议,允许用户通过 UDP 协议在系统之间传输文件. -- Curt Warfield(作者) TFTP 即 简单文本传输协议(Trivial File Transfer Pr ...

  7. 关于Ubuntu 安装tftp服务器的问题解决

    在做嵌入式开发时,tftp服务器是必备功能,但是往往tftp服务安装总是出现莫名其妙的问题.当前又装了一个Ubuntu14.04系统,按照网上方法死活不成功. 问题表现为tftpd-hpa服务死活不能 ...

  8. Ubuntu 建立tftp服务器

    在嵌入式linux开发过程中需要使用tftp方式从Linux主机下载文件到板子中,因此需要在主机linux系统中安装tftp服务器. Ubuntu-9.10中安装tftp服务器的方法如下: 4.2.1 ...

  9. linux 指令tftp传输文件_tftp命令_Linux tftp 命令用法详解:在本机和tftp服务器之间使用TFTP协议传输文件...

    tftp命令用在本机和tftp服务器之间使用TFTP协议传输文件. TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现.嵌入式linux的tftp开发环境包括两个方面:一是linux服 ...

最新文章

  1. 通过javascript把图片转化为字符画
  2. python调用golang 数组_Go 语言数组复制
  3. Linux的启动流程(CentOS 6)
  4. Angular 界面元素的条件渲染
  5. 7-207 排序 (25 分)
  6. LoadRunner安装
  7. java model1和model2_Java项目(4)——探究两种开发模型的异同-Model1与Model2
  8. 洛谷1966 火柴排队
  9. 知乎cookies的介绍_Requestium = Requests + Selenium
  10. 人工神经网络图像识别,人脸识别神经网络模型
  11. 32位微型计算机中的32级的4,2013年计算机等级考试一级微机知识预测题(4)
  12. 【软件工程期末复习】知识点+大题详解(E-R图、数据流图、N-S盒图、状态图、活动图、用例图....)
  13. 非常有意思的Flowlet
  14. ANSYS湿模态分析(一)_51CAE_新浪博客
  15. 利用filezilla下载文件,出现无法启动传输和严重文件错误
  16. Linux的iio数据流程,linux iio子系统
  17. linux中编辑jar包的内容
  18. 中国Internet九大骨干网
  19. 有没有开源的虚拟路由器?有,VPP了解一下
  20. QT编译:error LNK2019: 无法解析的外部符号 __imp_xxx,函数 “public: static void __cdecl Control::KeySet(class QSt

热门文章

  1. 元宇宙江湖里的“牛鬼蛇神”
  2. 企业CIO如何做好免费ERP系统的选型
  3. 关于运行web项目出现的问题及解决方案
  4. JEECG 4.0版本发布,基于代码生成器的JAVA快速开发平台
  5. 咸丰中等职业学校计算机,计算机应用基础上机指导与练习(中等)-孙海侠编著.pdf...
  6. DSP28377S_程序从FLASH部分复制到RAM中运行详解
  7. 财政部ppp数据库爬虫
  8. Java理解误区——方法的重载是多态性的一种体现?
  9. 2006年4月度国际标准化组织C++会议纪要[原文发表时间:2006年5月3日]
  10. 无人机高清远程直播+4G/5G智能多网路由系统