Название: QT и LWIP Отправлено: Harlon от Май 16, 2018, 21:18 Суть вопроса вот в чем:
Есть у меня TCP сервер поднятый на микроконтроллере(bare metal) с использованием стэка LWIP, на callback (без сокетов, там всяких). Этому серверу надо слать запросы и получать ответы, от него. Вопрос в следующем, возможно ли средствами QT написать такой клиент, что бы общаться со столь специфическим сервером? (Примерно как PuTTY или Hercules) Помогите пожалуйста. P.S. Возможно подскажете куда копать, если это в обще реально... Название: Re: QT и LWIP Отправлено: vic57 от Май 17, 2018, 01:28 если tcp стек поддерживается, почему нет?
начни с простого http://qt-doc.ru/realizacia-klienta-s-pomoschu-klassa-qtcpsocket.html Название: Re: QT и LWIP Отправлено: Harlon от Май 17, 2018, 10:17 Спасибо, за ответ, просто по моему не опытному мнению, если я упаковываю сокет, то и на сервер должен принимать сокет, а там его нету. Но это по моему неопытному мнению.
Название: Re: QT и LWIP Отправлено: kuzulis от Май 17, 2018, 12:07 Сокет это просто программная абстракция для "высокоуровневых" ОС.
Название: Re: QT и LWIP Отправлено: vic57 от Май 18, 2018, 03:42 Спасибо, за ответ, просто по моему не опытному мнению, если я упаковываю сокет, то и на сервер должен принимать сокет, а там его нету. Но это по моему неопытному мнению. а как ты шлешь запросы на сервер?Название: Re: QT и LWIP Отправлено: Harlon от Май 18, 2018, 14:55 Туплю страшно,
Код
Это эхо-сервер написанный на Си, для начала надо послать сюда сообщение и сервер пошлет его обратно. Вопрос вот в чем, в какую сторону мне смотреть? Просто через socket->write() посылать строку или использовать QDataStream или ещё как-то? Просто если на эхо сервер написанный на QT, что-то отсылать оно нормально уходит, а на этот я как только не извращался, не шлет и всё. А вот Hercules нормально шлет и получает. Название: Re: QT и LWIP Отправлено: Old от Май 18, 2018, 15:03 Это же эхо-сервер. Ему все равно, что вы ему пришлете, он вам вернет что пришло. :)
А вы на какой порт к нему подключаетесь? Название: Re: QT и LWIP Отправлено: Harlon от Май 18, 2018, 15:47 Порт в мк можно передать любой, у меня 7. Т.е. я могу передать ему просто QString. Но вопрос через какой механизм, просто socket->write("asd") передать туда?
Название: Re: QT и LWIP Отправлено: Old от Май 18, 2018, 15:58 Порт в мк можно передать любой, у меня 7. Т.е. я могу передать ему просто QString. Но вопрос через какой механизм, просто socket->write("asd") передать туда? Лучше сразу делать правильно и работать с QByteArray, а в него уже можно укладывать что угодно. Лучше сразу через QDataStream. :)А его уже в socket->send( data ); Название: Re: QT и LWIP Отправлено: Harlon от Май 18, 2018, 16:02 Ок, попробую и отпишусь. Спасибо за подсказку. Ещё вопрос, что за send?
Название: Re: QT и LWIP Отправлено: vic57 от Май 20, 2018, 07:00 так сделай самый простой клиент и проверь
http://masandilov.ru/network/guide_to_network_programming6 только порт лучше сделать > 1024, меньше вроде резервируются системой типа 0.0.0.0:8000 Название: Re: QT и LWIP Отправлено: vic57 от Май 20, 2018, 07:34 проверить ты можешь telnet
Код
Название: Re: QT и LWIP Отправлено: Harlon от Май 22, 2018, 22:35 Разобрался с отправкой и приемом, теперь новая проблема вылезла, посылаю я int из LWIP получаю его своей программой.
Теперь 2 варианта ответов разберу. 1) На LWIP поднят эхо-сервер, на него посылаю допусти int 5 через QBytearray, далее принимаю его так: Код и в debug выводит 5, то есть всё нормально и хорошо; 2) Я на сервере LWIP инициализирую int 5, отправляю её своему клиенту на QT и вместо пяти в debug я получаю 1239765247. Это работает не так как надо бы. Ещё в дебаг я выводил содержимое QBytearray. И вот тут тоже интересно, когда я шлю на эхо ответ в массиве байтов выглядит как-то так "\r\x00\x00\x00" это цифра "13", а вот так выглядит int отправленный сервером во втором варианте "\x00""E\x00\x01" та же цифра "13", а вывод в программе получается такой 16794880. Может есть идеи, каким-то другим способом разобрать строку байтов в int? Название: Re: QT и LWIP Отправлено: vipet от Май 23, 2018, 00:42 а инт на сервере это сколько байт и как лежат?
Название: Re: QT и LWIP Отправлено: Harlon от Май 23, 2018, 11:15 Вывод моего сервера:
little-endian //Это вывод функции из Википедии Код A1560 v.1 Test -----lwIP TCP echo server ------ TCP packets sent to port 6001 will be echoed back WARNING: Not a Marvell or TI Ethernet PHY. Please verify the initialization sequence link speed for phy address 3: 100 Board IP: 192.168.0.103 Netmask : 255.255.255.0 Gateway : 192.168.0.1 TCP echo server started @ port 7 Из этого я так понимаю можно сделать вывод, что байты располагаются от меньшего к большему, использовал для отправки тип данных обычный short, и вот мне, что интересно стало, мой QBytearray в дебаг выводит: Во вложении скриншот, Пояснение: это данные "\x00\x00\xEA%" - это пришла единица. а это число "0", но должно быть "1". НО меня ещё смущает "\x00\x00\xEA%", то что в конце строки "%" стоит, возможно, это связано с тем, что QBytearray переводит десятичные знаки в таблицу ASCII? Название: Re: QT и LWIP Отправлено: Old от Май 23, 2018, 12:05 У QByteArray есть метод toHex(). Используйте его для отображения бинарных данных.
С эндианами для передачи данных по сети уже определились давным давно. Все отправляемые данные в сеть должны быть в big-endian, поэтому его еще называют сетевым. Название: Re: QT и LWIP Отправлено: Harlon от Май 23, 2018, 13:15 Отправляю с сервера (напомню там Си), вот кусок кода отправки:
Код
в итоге я получаю не 52, а 4122 (это big endian), "101a"(это QBytearray Data.toHex(); ) Название: Re: QT и LWIP Отправлено: Old от Май 23, 2018, 16:12 Код
Название: Re: QT и LWIP Отправлено: Harlon от Май 23, 2018, 16:54 Спасибо тебе Йода, ты просто бог! Я как разбогатею с тобой поделюсь обязательно... А с массивом интов так же получится?
|