Можно, конечно, читать МАС-адрес в шестнадцатеричном от пользователя, как показано на рисунке, для небольшого выпуска, за исключением: давая fgets
буфер просто достаточно большой для 17 символов и окончательный '\0'
вызовет новую строку набрана чтобы остаться в потоке stdin
. Он будет прочитан перед любым дополнительным сообщением, вероятно, не так, как вы ожидали бы.
Кроме того, вы хотите преобразовать этот адрес в двоичный формат, ожидаемый интерфейсом сокета.
Дайте fgets
больший буфер, и разобрать с sscanf
:
char line[80];
unsigned char MAC[6];
printf("\n\tEntrez l'adresse Mac (XX:XX:XX:XX:XX:XX) en Hexa :");
if (fgets(line, sizeof(line), stdin)
&& sscanf(line, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
MAC, MAC+1, MAC+2, MAC+3, MAC+4, MAC+5) == 6) {
// MAC address correctly parsed into MAC[0...5]
} else {
// invalid input.
}
Вы должны взять этот вопрос на другом форуме, как это прямо нарушает правила дома-StackOverflow. Здесь вы найдете конкретные проблемы, которые вы пытаетесь решить с помощью набора технологий и нуждаетесь в помощи. –
Практически любой язык программирования имеет инструменты для сетевой коммуникации. – David
спасибо Khalil –