Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/48: Рейтинг темы: голосов - 48, средняя оценка - 4.73
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83

Определить подключено ли к компьютеру устройство по протоколу Ethernet

08.08.2014, 22:29. Показов 11259. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!
Помогите, пожалуйста, советом или примером. Задача состоит в том, чтобы программно, средствами Qt, определить подключено ли к компьютеру устройство по протоколу Ethernet, настроить соединение и обмен данными. Операционная система Linux. Я даже не знаю куда двигаться. В Qt совсем недавно. Заранее большое спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.08.2014, 22:29
Ответы с готовыми решениями:

Отправить команду на устройство, подключенное к компьютеру через ethernet, и принять от него ответ
Здравствуйте, возникла проблема в подборе материала и примеров выполнения программы по работе с ethernet Собственно есть устройство...

Serial port. Можно ли определить подключено ли внешнее устройство?
Вопрос такой Можно ли определить подключено ли внешнее устройство? К PC подключаем USB/RS-232 9 pin D-SUB, а уже к нему PC/PPI cable...

Проверка, подключено ли USB-устройство
Написать прогу , которая проверяет, подключено ли usb-устройство, если да, то выдаёт звуковой сигнал и добавляет к имени открытого файла ...

50
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
15.08.2014, 21:44  [ТС]
Студворк — интернет-сервис помощи студентам
Конечно, понимать работу IP, TCP и UDP - это хорошо. Но в вашем случае, если требуется только работа со стороны ПК, то нужно только знать, на какой IP-адрес и порт отправлять датаграммы и из каких данных эти датаграммы должны состоять.
Т.е. со всем этим справиться мне поможет QUdpSocket?

А вот если требуется работа со стороны контроллера, тогда лучше изучить из чего состоят пакеты и как они передаются по сети.
А на стороне ПК мне разве не надо разбирать пакеты?

Добавлено через 3 минуты
Скажите, пожалуйста, а Ip-адрес Мк я тоже должна знать заранее и ли все-таки надо будет отправлять широковещательный запрос?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
15.08.2014, 21:50
А на стороне ПК мне разве не надо разбирать пакеты?
при использовани обертки QUdpSocket вы избавлены от необходимости разбирать пакеты на нижнем уровне, но еще остается протокол верхнего уровня (формат обмена с МК) поверх этого UDP. Если формат еще не выбран, то подойдет любой вариант передачи пакетов с контрольной суммой в теле пакета.

Ip-адрес Мк я тоже должна знать заранее и ли все-таки надо будет отправлять широковещательный запрос?
вот ежели вы выберете броадкаст-режим (широковещательный адрес) обмена по UDP, тогда не нужно знать IP.
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
15.08.2014, 21:54  [ТС]
Спасибо. Буду дальше изучать.
0
Почетный модератор
 Аватар для Humanoid
11563 / 4358 / 453
Регистрация: 12.06.2008
Сообщений: 12,459
16.08.2014, 12:19
Цитата Сообщение от raxp Посмотреть сообщение
вот ежели вы выберете броадкаст-режим (широковещательный адрес) обмена по UDP, тогда не нужно знать IP.
Но он работает не во всех случаях. Через шлюзы широковещательные запросы обычно не проходят. Поэтому, лучше знать IP адрес.
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
16.08.2014, 13:25
...если разные подсети, то маршрутизации и так и так не избежать.

Что до широковещательных посылок, то их использование подразумевает их поддержку маршрутизатором, только вот при переходе из внутреннего (Интранет) сегмента на внешний (Интернет) провайдеры блокируют их распространение. Поэтому нужно сразу определиться с будущим построением и масштабированием сети. Есть правда возможность завернуть широковещательный запрос, и есть MBONE.
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
16.08.2014, 19:26  [ТС]
На сколько я понимаю, в моем случае, будет один шнурок (витая пара), один конец которого подключен к ПК, а второй конец к МК
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
16.08.2014, 19:34
...а ежели возникнет задача работать с МК удаленно через Интернет? В этом случае ваша фраза не изменится, а подход уже будет совсем иным.
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
16.08.2014, 21:02  [ТС]
Согласна
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
01.09.2014, 20:32  [ТС]
Здравствуйте, уважаемые программисты!
У меня возникла проблема. Я передаю файл по tcp таким образом.
Сервер:
C++ (Qt)
1
2
3
4
5
6
7
8
9
void server::writeFile()
{
    QTcpSocket* writeFileSocket = (QTcpSocket*)sender();
    QFile file ("/home/00001-150713_a11.txt");   
    file.open(QIODevice::ReadOnly);
    QByteArray buf = file.readAll();
    writeFileSocket->write(buf, buf.size());
   writeFileSocket->flush(); 
}
Получаю:
Клиент:
C++ (Qt)
1
2
3
4
5
6
7
8
void Client::readFile()
{
    QFile file("/home/my.txt");
    file.open(QIODevice::WriteOnly);
    QByteArray arrFile = tcpSocketReadFile->readAll();
    file.write(arrFile);
    file.close();
}
Проблема в том, что при получении создается файл в нем сохраняется слово "Ready", которое сервер отсылает пред тем, как начать отправлять файл. Сам файл клиент не получает. Помогите советом, что делаю не так. Заранее спасибо
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
02.09.2014, 08:33
1- код не полон, не видно где вы отсылаете кодовое слово
2- при приеме у вас дозапись в файл? Или вы считаете, что весь набор данных впихивается в один вызов readAll()?
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
02.09.2014, 09:57  [ТС]
Вот так отправляю Ready

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
server::server(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::server)
{
    ui->setupUi(this);
   
    fortunes<< tr("Ready");
    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(write()));
}
void server::write()
{
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
 
    out << (quint16)0;
    out << fortunes.at(qrand() % fortunes.size());
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));
 
 
    clientConnection = tcpServer->nextPendingConnection();
    connect(clientConnection, SIGNAL(disconnected()),
            clientConnection, SLOT(deleteLater()));
 
   clientConnection->write(block);
   connect(clientConnection, SIGNAL(readyRead()),this, SLOT(read()));
  
}


Дозапись в файл пока не делаю, пока не разобралась с тем как бить файл. Использую пока маленькие файлы.
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
02.09.2014, 17:51
...а вы сниффером смотрели, сервер вообще что-то отправляет по запросу клиента?
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
02.09.2014, 18:40  [ТС]
Сервер и клиент обмениваются строковыми сообщениями. А при передаче файла сервером, в QByteArray файл считывается, но в
C++ (Qt)
1
writeFileSocket->write(buf, buf.size());
не записывается. Я не понимаю в чем причина?
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
04.09.2014, 20:55  [ТС]
Так никто и не поможет?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
04.09.2014, 21:11
Передавайте малыми порциями, кусками.
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
05.09.2014, 00:03  [ТС]
Малыми порциями тоже пробовала, та же история. Что -то я видимо не то делаю

Добавлено через 2 часа 41 минуту
Всем спасибо. Я справилась Все работает
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
05.09.2014, 09:20
Показывайте.
0
4 / 4 / 1
Регистрация: 08.08.2014
Сообщений: 83
12.09.2014, 21:44  [ТС]
Здравствуйте! Я сейчас в отпуске, поэтому долго не отвечала.
Отправляла так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void server::writeFile()
{
    QFile *sendFile = new QFile ("/home/150713.txt");
    
    if (sendFile->open(QIODevice::ReadOnly))
    {
        QByteArray byteArray;
        while(!sendFile->atEnd())
        {
            byteArray = sendFile->read(800);
 
            int blsize = blsize + clientConnection->write(byteArray);
      }
        ui->lineEdit_3->setText(tr("File send"));
    }
}
Получала так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
void Client::readFile()
{
    QFile file("/home/15071313.txt");
    file.open(QIODevice::WriteOnly);
    while(!tcpSocket->atEnd())
    {
        QByteArray data = tcpSocket->read(800);
        file.write(data);
    }
    file.close();
}
Но я похоже рано обрадовалась, когда сервер и клиент на одной машине, то все работает замечательно. Но в локальной сети клиент создает и сохраняет пустой файл. В режиме отладки создется файл размером 1400байт от исходного размера отправленного файла. Что с этим делать не знаю.
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
12.09.2014, 22:11
1- проверьте сниффером, идет ли отправка данных
2- данным макаром:
C++ (Qt)
1
2
3
4
5
while(!tcpSocket->atEnd())
    {
        QByteArray data = tcpSocket->read(800);
        file.write(data);
    }
вы выгребаете по 800 байт, пока не встретится конец файла. А что, если обрыв или символ никогда не встретится? А метод write() разве производит дозапись в файл, а не его перезапись?
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
13.09.2014, 01:21
Цитата Сообщение от Tanyusha Посмотреть сообщение
В режиме отладки создется файл размером 1400байт от исходного размера отправленного файла. Что с этим делать не знаю.
Читать учебник по сетям передачи данных Maximum transmission unit
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2014, 01:21

Проверить подключено ли устройство к USB
Как это осуществить, нашел парочку кодов в интернете, но ничего нормально не работает, все с ошибками

Если к компьютеру подключено два источника интернета, как он будет работать?
Здравствуйте. Хочу разобрать, больше для общего развития, такую тему. Вот, допустим, у нас в компьютере воткнут в USB 3g модем и...

Неизвестное устройство, хотя ничего не подключено
Доброго времени суток... имею компьютер TOSHIBA satellite l 300, 4 gb, windows 7 64x... каждые 2 -3 минуты вылазеет уведомление о...

Найти к какому COM порту подключено устройство
Добрый день. Подскажите пожалуйста, как можно получить список активных COM портов в винде(тот что я вижу в диспетчере устройств). Задачу у...

Как узнать что устройство подключено к определенной wifi
Необходимо понять, подключено ли устройство к определенной сети wifi. Помогите пожалуйста!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru