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

📄 tftpserver.h.txt

📁 linux下的tftp源代码,分为服务器端和连接客户端
💻 TXT
字号:
#include <sys/socket.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>

// packet opcode
#define RRQ_OPCODE		1
#define WRQ_OPCODE		2
#define DATA_OPCODE		3
#define ACK_OPCODE		4
#define ERROR_OPCODE	5

// mode value
#define ASCII			"netascii"
#define BIN				"octet"

// tftp state 
#define	CLOSED_STATE			0
#define SEND_DATA_STATE			1
#define RECV_DATA_STATE			2
#define WAITING_CLOSE_STATE		3
#define ERROR_STATE				4

struct RRQ {
	unsigned short		OpCode;
	char				FileName[80];
	char				Mode[10];
};

struct WRQ {
	unsigned short		OpCode;
	char		FileName[80];
	char		Mode[10];
};

struct DATA {
	unsigned short		OpCode;
	unsigned short		BlockNumber;
	char				Data[1];
};

struct ACK {
	unsigned short		OpCode;
	unsigned short		BlockNumber;
};

struct ERROR {
	unsigned short		OpCode;
	unsigned short		ErrorNumber;
	char				ErrorData[1];
};

struct CONTEXT {
	int					State;
	int					RecvNumber;
	int					SendNumber;
	int					CurrentByteSize;
	char				FileName[80];
	FILE				*fp;
	struct sockaddr_in	ClientAddr;
	struct CONTEXT		*next; 
};

int process_RRQ(int socket, char *msg, int recvsize, 
		struct sockaddr_in *clientaddr, int clientaddrsize);

int process_WRQ(int socket, char *msg, int recvsize, 
		struct sockaddr_in *clientaddr, int clientaddrsize);

int process_ACK(int socket, char *msg, int recvsize, 
		struct sockaddr_in *clientaddr, int clientaddrsize);

int process_DATA(int socket, char *msg, int recvsize, 
		struct sockaddr_in *clientaddr, int clientaddrsize);

int process_ERROR(int socket, char *msg, int recvsize, 
		struct sockaddr_in *clientaddr, int clientaddrsize);

struct CONTEXT *find_context(struct sockaddr_in *clientaddr);

int remove_context(struct CONTEXT *pContext);

int remove_all_context(void);

int send_error(int socket, struct sockaddr_in *clientaddr, int clientaddrsize, 
			unsigned short errorcode, char *errormsg);

⌨️ 快捷键说明

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