资源简介
tftp服务器c源码,初学者非常好的参考代码。包括客户端和服务器端两个文件。

代码片段和文件信息
/* tftp client demo */
#include
#include
#include
#include
#include
#include
#include
#include
#include “tftpc.h“
static inline char conv_char(char ch)
{
ch = ch & 0xff;
if((ch < 0x20) || ((unsigned char)ch > 0x7f))
return ‘.‘;
return ch;
}
void dump_mem(const char *tip void *base int size)
{
unsigned char *p = base;
int rows = size / 16;
int rest = size % 16;
int i j;
printf(“[%s len = %d]\n“ tip size);
for(i = 0; i < rows; i++) {
printf(“0x%p:“ p);
for(j = 0; j < 16; j++)
printf(“%02X “ p[j]);
printf(“|“);
for(j = 0; j < 16; j++)
printf(“%c“ conv_char(*p++));
printf(“\n“);
}
printf(“0x%p:“ p);
for(j = 0; j < rest; j++)
printf(“%02X “ p[j]);
for(;j < 16; j++)
printf(“ “);
printf(“|“);
for(j = 0; j < rest; j++)
printf(“%c“ conv_char(p[j]));
printf(“\n“);
}
size_t read_with_select(int fd void *buffer size_t size int flags struct sockaddr *addr socklen_t *addrlen int tout)
{
#include
fd_set rd_fds;
struct timeval timeout;
timeout.tv_sec = tout;
timeout.tv_usec = 0;
FD_ZERO(&rd_fds);
FD_SET(fd&rd_fds);
if(select(fd + 1 &rd_fds NULL NULL &timeout) > 0)
{
return recvfrom(fd buffer size flags addr addrlen);
}
return -1;
}
size_t send_to(int sockfd void *buf size_t len int flags struct sockaddr *addr socklen_t addrlen)
{
dump_mem(“SEND“ buf len);
return sendto(sockfd buf len flags addr addrlen);
}
size_t recv_from(int sockfd void *buf size_t len int flags struct sockaddr *addr socklen_t *addrlen int tout)
{
if(tout == 0)
tout = 20;
*addrlen = sizeof(struct sockaddr);
len = read_with_select(sockfd buf len flags addr addrlen tout);
dump_mem(“RECV“ buf len);
return len;
}
int make_req(char *outbuf int rw char *filename)
{
char *p = &outbuf[2];
outbuf[0] = 0x00;
outbuf[1] = rw;
strcpy(p filename);
p += (strlen(filename) + 1);
strcpy(p “octet“);
p += (strlen(“octet“) + 1);
//----------------------------------->
// no options
//<-----------------------------------
return (int)p - (int)outbuf;
}
int make_ack(char *outbuf char *package int *blknumber)
{
switch(package[1])
{
case TFTP_OPC_DATA:
memcpy(outbuf package 4);
outbuf[1] = TFTP_OPC_ACK;
*blknumber = ntohs(*((unsigned short*)&package[2]));
break;
case TFTP_OPC_OACK:
memset(outbuf 0 4);
outbuf[1] = TFTP_OPC_ACK;
*blknumber = 0;
break;
case TFTP_OPC_ERROR:
break;
}
return package[1];
}
int send_req(int sockfd char *ip unsigned short port int rw char *filename)
{
unsigned char buffer[512];
struct sockaddr_in srvAddr;
socklen_t len;
bzero(&srvAddr sizeof(srvAddr));
srvAddr.sin_family = AF_INET;
srvAddr.sin_port = htons(port);
inet_pton(AF_INET ip &srvAddr.sin_addr.s_addr);
len = make_req(buffer rw filename);
if(send_to(sockfd buffer len 0 (struct sockaddr*)&srvAddr size
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2009-02-19 16:45 tftp服务器源码
目录 0 2009-02-19 16:45 tftp服务器源码\tftp-1.0-0
文件 5679 2009-02-17 14:45 tftp服务器源码\tftp-1.0-0\tftpc-1.c
文件 8370 2009-02-18 12:06 tftp服务器源码\tftp-1.0-0\tftpc-2.c
文件 1029 2009-02-17 14:19 tftp服务器源码\tftp-1.0-0\tftpc.h
文件 3493 2009-02-18 15:37 tftp服务器源码\tftp-1.0-0\udp-broadcast.c
目录 0 2009-02-19 16:45 tftp服务器源码\tftp-1.0-1
文件 197 2006-12-18 04:24 tftp服务器源码\tftp-1.0-1\Makefile
文件 1709 2006-12-18 04:19 tftp服务器源码\tftp-1.0-1\tftp.h
文件 27920 2006-12-18 04:19 tftp服务器源码\tftp-1.0-1\tftpc.c
文件 25001 2006-12-18 04:19 tftp服务器源码\tftp-1.0-1\tftpd.c
----------- --------- ---------- ----- ----
73398 11
相关资源
- 基于MFC的TCP调试助手源码95706
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 移木块游戏,可以自编自玩,vc6.0编写
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- C++纯文字DOS超小RPG游戏
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- 安科瑞智能电能表MODBUS通讯程序 VC6
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
评论
共有 条评论