我正在尝试在C中实现TFTP客户端(Windows,Visual Studio 2005)。
TFTP客户端应该连接到端口69上的远程TFTP服务器地址。
TFTP客户端正在使用ENET API进行网络连接,但我无法使用它。
TFTP客户端永远不会切换到“已连接”状态,并且处于“连接”状态。
当我在Windows 7(cmd,Windows控制台)上运行本机Windows TFTP客户端时,连接到TFTP服务器没有问题,我可以 检索远程文件没有任何问题。
所以我必须在下面的代码中做错了,我希望那里的人可以告诉我我做错了什么:
#include "enet.h"
#include <stdlib.h>
#include <stdio.h>
#pragma comment(lib, "Winmm.lib")
#pragma comment(lib, "Ws2_32.lib")
void main(void)
{
ENetAddress address;
ENetEvent thisEvent;
ENetPeer *peer;
ENetHost* client;
int rc;
memset(&thisEvent,0,sizeof(ENetEvent));
rc = enet_initialize ();
/* Create a TFTP client */
client = enet_host_create(NULL, 1,1,0,0);
/* Address and port of remote TFTP server */
rc = enet_address_set_host (& address, "192.168.30.50");
address.port = 69;
/* Connect client to server */
peer = enet_host_connect (client, & address, 1, 0);
while (1)
{
printf("State = %d | Event Type = %d\n", peer->state, thisEvent.type);
enet_host_service (client, &thisEvent, 1000);
}
}
答案 0 :(得分:1)
从documentation看来,这个“ENet”库看起来不像是普通的UDP通信。相反,它实现了“在UDP上分层的单一,统一协议”。这不是TFTP协议,因此您的客户端与标准TFTP服务器不兼容。
改用普通套接字。