0

C (Windows、Visual Studio 2005) で TFTP クライアントを実装しようとしています。

TFTP クライアントは、ポート 69 でリモート TFTP サーバー アドレスに接続することになっています。

TFTP クライアントはネットワーク関連に ENET API を使用していますが、動作させることができません。

TFTP クライアントが「CONNECTED」状態に切り替わらず、「CONNECTING」状態のままになります。

Windows 7 でネイティブ Windows TFTP クライアント (cmd、Windows コンソール) を実行すると、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);
    }
}
4

1 に答える 1

1

ドキュメントからは、この「ENet」ライブラリがプレーンな UDP 通信用であるとは思えません。むしろ、「UDP 上に階層化された単一の統一プロトコル」を実装します。これは TFTP プロトコルではないため、クライアントは標準の TFTP サーバーと互換性がありません。

代わりに普通のソケットを使用してください。

于 2015-06-02T22:18:03.663 に答える