Добрый вечер всем.
У меня возникают проблемы при создании клиента TFTP для назначения в C ++, который использует #include
Я отправляю буфер символов:
буфер = { ‘0’, ‘2’, ‘е’, ‘я’, ‘L’, ‘е’, ‘N’, ‘а’, ‘т’, ‘е’, ‘0’, ‘о’ , ‘с’, ‘т’, ‘е’, ‘т’, ‘0’};
Используя код:
sendto (sock, buffer, strlen (buffer), 0, (sockaddr *) &serverAddr, sizeof (sockaddr));
Но когда я смотрю на эту передачу в WireShark, она говорит: «Код операции: неизвестно (12338)», когда я смотрю на часть кода операции.
Даже если он выбрал код операции из строки
Я абсолютно застрял, любая помощь будет оценена. Я уверен, что если я смогу отправить и получить сообщение, я легко справлюсь с остальными.
Просто бросил здесь, что я сделал, но отмеченный ответ был в основном это
Использовал БАЙТ из winsock2 (не знаю, нужно ли мне, но лучше, чем потом сожалеть)
буфер = {(BYTE) 0, (BYTE) 2, ‘е’, ‘я’, ‘L’, ‘е’, ‘N’, ‘а’, ‘т’, ‘е’, (BYTE) 0, ‘о’, ‘с’, ‘т’, ‘е’, ‘т’, (BYTE) 0};
а также
sendto (sock, buffer, sizeof (buffer), 0, (sockaddr *) &serverAddr, sizeof (sockaddr));
Не strlen(buffer)
но sizeof(buffer)
…
Стрлен перестает присматривать за персонажами при первом появлении '\0'
— так что он возвращает неопределенное значение для вашего буферного массива, так как '\0'
нет в вашем буфере.
Если вы хотите начать свой буфер с кодом операции 02
затем передайте его как целые числа, а не их представление цифр
buffer={0,2,'f','i','l','e','n','a','m','e','0','o','c','t','e','t','0'};
// ^ ^ simple numbers - not characters - not sure about rest of your buffer
12338 в десятичном виде — 0x30, 0x32 в шестнадцатеричном, что соответствует ‘0’ и ‘2’ из вашего буфера.
Вы используете символы ascii, но вам нужно использовать десятичное / целое число, установив их в (char) 0x00
а также (char) 0x02
в вашем буфере.