Я пытаюсь реализовать 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);
}
}
Хм ... Я не согласен. Я использую клиент TFTP поверх ENET. Пакеты, обменянные между TFTP-клиентом и TFTP-сервером, переносятся с использованием UDP, поэтому я не понимаю, почему я не могу использовать ENET для обработки пакетного трафика. – user1884325
Как я уже говорил, библиотека ENet реализует ** собственный протокол **. И клиент, и сервер должны говорить протокол Enet. TFTP-сервер не говорит по протоколу ENET, поэтому вы не можете использовать клиент Enet с TFTP-сервером. –