tftp server
2017-03-16 20:10:38 0 举报
tftp_server
作者其他创作
大纲/内容
return 0
sockfd : 套接口描述字SOL_SOCKET : 基本套接口SO_REUSEADDR : 允许在bind ()过程中本地地址可重复使用opt : 指向变量的指针 类型:整形,套接口结构
return 1
struct TFTPData data data.header.opcode = htons(OPCODE_DATA) data.block = htons(block)
初始化
True
True设置套接字选项
套接字绑定
if (0==len)
False
if (0==res)
proto=getprotobyname(\"udp\")
复制 buff 所指的内存内容的前 len 个字节到 data-data 所指的内存地址上
recvlen=sizeof(server_addr)
if (0sendlen)
if (0 recvlen)
struct TFTPHeader *header = (struct TFTPHeader *)buffer
AF_INET : IPv4 网络协议SOCK_DGRAM : UDPproto-p_proto : 协议号
if (0ret)
复制内存
if (NULL!=proto)
data-data : 要操作的内存的指针0 : 要设置的值512 : 前 512 个字节
通信流程
发送数据
if (OPCODE_ACK == ntohs(header-opcode))
TFTP报文格式
sendlen=sizeof(server_addr)
port=69
if (OPCODE_RRQ == ntohs(header-opcode))
int filenamelen=strlen(rrq-filename)+1;rrq-mode = ((char *)buffer+filenamelen+2);
if (0sockfd)
发送Data
从协议数据库返回条目
接收数据
if (0!=bufferlen)
TFTPS
struct sockaddr_in server_addr
block=1
if (NULL!=fd)
rrq-filename (char *)buffer+2;
True读取文件
True建立套接字选项
True获得客户端发来的ACK
True获得客户端发来的RRQ
buff : 接收数据的地址sizeof(void) : 一个单元的大小512 : 单元个数
True打开文件
port
FIONREAD : 获得缓冲区的字节数
收藏
0 条评论
下一页