【问题标题】:TFTP Client (based on ENET) won't connect to remote TFTP serverTFTP 客户端(基于 ENET)不会连接到远程 TFTP 服务器
【发布时间】:2015-06-02 22:09:06
【问题描述】:

我正在尝试用 C 语言(Windows、Visual Studio 2005)实现一个 TFTP 客户端。

TFTP 客户端应该连接到端口 69 上的远程 TFTP 服务器地址。

TFTP 客户端正在使用 ENET API 进行网络连接,但我无法让它工作。

TFTP 客户端永远不会切换到“CONNECTED”状态,而是停留在“CONNECTING”状态。

当我在 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);
    }
}

【问题讨论】:

    标签: c sockets udp tftp enet


    【解决方案1】:

    documentation 看来,这个“ENet”库似乎不是用于普通 UDP 通信的。相反,它实现了“在 UDP 上分层的单一、统一的协议”。这不是 TFTP 协议,因此您的客户端与标准 TFTP 服务器不兼容。

    改用普通套接字。

    【讨论】:

    • 嗯...我不同意。我正在 ENET 之上实现一个 TFTP 客户端。 TFTP 客户端和 TFTP 服务器之间交换的数据包使用 UDP 传输,所以我不明白为什么不能使用 ENET 来处理数据包流量。
    • 正如我所说,ENet 库实现了一个自定义协议。客户端和服务器都需要使用 Enet 协议。 TFTP 服务器不使用 ENET 协议,因此您不能将 Enet 客户端与 TFTP 服务器一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多