2015-06-02 3 views
0

Я пытаюсь реализовать TFTP-клиент в C (Windows, Visual Studio 2005).Клиент TFTP (на основе ENET) не подключается к удаленному TFTP-серверу

Клиент TFTP должен подключиться к удаленному адресу TFTP сервера на порт 69.

Клиент TFTP использует ENET API для сетевой вещи, но я не могу заставить его работать.

Клиент TFTP никогда не переключается в состояние «ПОДКЛЮЧЕН» и застревает в состоянии «ПОДКЛЮЧЕНИЕ».

Когда я запускаю собственный клиент Windows TFTP на Windows 7 (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); 
    } 
} 

ответ

1

От documentation он не похож эта библиотека «ENet» предназначена для простой UDP-связи. Скорее, он реализует «единый, единообразный протокол, распределенный по UDP». Это не протокол TFTP, поэтому ваш клиент не совместим со стандартным TFTP-сервером.

Вместо этого используйте обычные розетки.

+0

Хм ... Я не согласен. Я использую клиент TFTP поверх ENET. Пакеты, обменянные между TFTP-клиентом и TFTP-сервером, переносятся с использованием UDP, поэтому я не понимаю, почему я не могу использовать ENET для обработки пакетного трафика. – user1884325

+0

Как я уже говорил, библиотека ENet реализует ** собственный протокол **. И клиент, и сервер должны говорить протокол Enet. TFTP-сервер не говорит по протоколу ENET, поэтому вы не можете использовать клиент Enet с TFTP-сервером. –

Смежные вопросы