Page 1 of 2 12 LastLast
Results 1 to 20 of 32

Thread: QT interface with telnet (hyperterminal) connection. Plotting received data

  1. #1
    Join Date
    Jun 2011
    Posts
    26
    Thanks
    3
    Thanked 3 Times in 3 Posts

    Default QT interface with telnet (hyperterminal) connection. Plotting received data

    Hello everybody,

    I am newbie in QT, but this last month I have been dealing with C++ and the SDK environment. What I want to do is to focus properly in how to develop my application, which is explained in the following:

    I have a wireless device which can transmit 802.11 data. It creates a point to point network. I could do this (it has nothing to do with QT yet...) by the next steps:

    1- I connect to the network created (by using the windows manager).

    2- I do a telnet connection by the hyperterminal by using TCP/IP (Winsock) or executing "telnet 164.256.1.1 2000" directly from the console.

    3- Once it is done, I can send ASCII commands to retrieve data.

    Having said that, what I want to do is the steps 2 and 3 automatically and create a QT graphical interface for:

    a) Establish some buttons that send specific commands (in the same way I can do with the hyperterminal)

    b) Store data received from the device (they are sent in ASCII commands, which I could see in the hyperterminal) and to graph them in the QT graphical interface in "real time" (e.g. send the command "give the state of your output" each second and graph the reception in the graphical interface)

    Can you tell me how could I carry out this, or what could be a good starting point (libraries to use)? My main concern is how to manage the wifi connection (because I understand I am doing a telnet procotol in the application layer with TCP/IP protocol in the transport layer, using a wifi connection of type ad hoc -the device connected to my pc-), the graphical part I think can be easy once the connection with the device is established. Also, I would like to know if there is something already done, because I am almost sure that what I want to do can be done with QT.

    Any thought will be very useful, since I am in the starting point.

    Thanks a lot,

    -E

  2. #2
    Join Date
    Sep 2009
    Location
    Wroclaw, Poland
    Posts
    1,394
    Thanked 342 Times in 324 Posts
    Qt products
    Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows Android

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    I do a telnet connection by the hyperterminal by using TCP/IP (Winsock) or executing "telnet 164.256.1.1 2000" directly from the console.

    3- Once it is done, I can send ASCII commands to retrieve data.

    Having said that, what I want to do is the steps 2 and 3 automatically and create a QT graphical interface for:

    a) Establish some buttons that send specific commands (in the same way I can do with the hyperterminal)

    b) Store data received from the device (they are sent in ASCII commands, which I could see in the hyperterminal) and to graph them in the QT graphical interface in "real time"
    If I get it right, I think QProcess sounds good for this task. You can start by reading docs here.

  3. #3
    Join Date
    Jun 2011
    Posts
    26
    Thanks
    3
    Thanked 3 Times in 3 Posts

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Hello Stampede,

    Thanks a lot for your answer. But maybe I did not explain very well what I want to do. I do not want to create a QT gui that connects with the hyperterminal. My intention is also to manage that connection with QT itself. Since I know it works with hyperterminal or executing "telnet 164.256.1.1 2000", I was wondering if this can be done with QT.
    Then what I want to know is how to send ASCII commands once the connection is established, as well as to receive them. Can it be possible?

    Regards,

    -E
    Last edited by Ethan; 8th July 2011 at 11:13.

  4. #4
    Join Date
    Sep 2009
    Location
    Wroclaw, Poland
    Posts
    1,394
    Thanked 342 Times in 324 Posts
    Qt products
    Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows Android

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Since I know it works with hyperterminal or executing "telnet 164.256.1.1 2000", I was wondering if this can be done with QT.
    Then what I want to know is to send ASCII commands once the connection is established, as well as to receive them. Can it be possible?
    I think you can open the "telnet 164.256.1.1" with QProcess, then you can write and read to / from it - to send commands use write method. You can receive them when waiting for readyRead signal and then calling one of read methods: read, readLine, getChar, readAllStandardOutput / readAllStandardError.

  5. #5
    Join Date
    Jun 2011
    Posts
    26
    Thanks
    3
    Thanked 3 Times in 3 Posts

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Thanks again.

    Yes, I could (i think) do that, but I see that Qtprocess is not compatible with Symbian for example, so I could not migrate my application to another system different from a pc. That's why I want to manage the connection without external applications and only with the QT libraries (i am taking a look now to QtTelnet class and the network examples that come with the SDK). Looking for other possible solutions .

    Thanks a lot,

    -E

  6. #6
    Join Date
    Sep 2009
    Location
    Wroclaw, Poland
    Posts
    1,394
    Thanked 342 Times in 324 Posts
    Qt products
    Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows Android

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Ok, good luck with your project
    I'm just curious, what do you mean by this:
    I see that Qtprocess is not compatible with Symbian for example
    Only limitation I see in documentation is related to some security requirements:
    On Symbian, processes which use the functions kill() or terminate() must have the PowerMgmt platform security capability. If the client process lacks this capability, these functions will fail.
    I'm not programming mobile devices, but I'm curious, can you post a link ?

  7. #7
    Join Date
    Jun 2011
    Posts
    26
    Thanks
    3
    Thanked 3 Times in 3 Posts

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Hello again!
    In the link you sent me I read "Note: On Windows CE and Symbian, reading and writing to a process is not supported." So I can guess I could have some problems when trying to migrate the application to symbian/android (not sure enough). Anyways I will try your solution. However, I am also curious. I seem to understand that with Qtprocess you are interacting with an external application. Don't you think we could establish the connection with the QT libraries themselves (maybe Qtcpsocket)?

    Thank you very much for your time,

    -E

  8. #8
    Join Date
    Sep 2009
    Location
    Wroclaw, Poland
    Posts
    1,394
    Thanked 342 Times in 324 Posts
    Qt products
    Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows Android

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Ok thanks, I missed that somehow.
    with Qtprocess you are interacting with an external application
    Thats correct, I thought about running telnet this way.
    Don't you think we could establish the connection with the QT libraries themselves (maybe Qtcpsocket)?
    I guess if you can connect by the "hyperterminal by using TCP/IP (Winsock) ", you can use sockets directly as well.

  9. #9
    Join Date
    Jun 2011
    Posts
    26
    Thanks
    3
    Thanked 3 Times in 3 Posts

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Thanks again!. Any other suggestions from the expert community ? In the meanwhile i'll be trying to solve it by myself. My intention is to publish the code after.

    Cheers,

    -E

  10. #10
    Join Date
    Dec 2008
    Location
    France
    Posts
    93
    Thanked 23 Times in 22 Posts
    Qt products
    Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Hi,
    I'm responding here according to the PM you sent.

    I used QtTelnet from QtSolutions in the past and it works fine for me. I have only used it under linux I can tell how it works in other worlds.
    Unfortunately QtSolutions is not managed anymore by Nokia , can be found here http://qt.gitorious.org/qt-solutions. QtTelnet seems to be available only for Qt 4.4 & Qt 4.5. I look quickly in the git where QtSolutions can be found but I found no reference to QtTelnet any more.

    If you are interested I should have a tarball somewhere with the source code of QtTelnet (a version which work fine with Qt 4.6.2), maybe you can compile it for your Qt version successfully.

    You can have an idea of what QtTelnet do at http://doc.qt.nokia.com/solutions/4/.../qttelnet.html

    In my case I used it to display on a PC remote log file in real time (tail -f /var/log/message on the telnet shell and display the result in a QTextEdit).

  11. #11
    Join Date
    Jun 2011
    Posts
    26
    Thanks
    3
    Thanked 3 Times in 3 Posts

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Hello Nix,

    Yes, I would be interested in the source code you used. I have to say that I am a little bit surprised that new versions of QT cannot manage a Telnet connection with an ad-hoc network. I "only" need to do something like "telnet 169.254.1.1 2000". With a terminal emulator it works fine, why should not I do this with QT only?

    I think some classes in the Network library can do this, but I am unable to find the way.

    Let me know if you can do the tarball you mentioned. I´ll continue looking for a solution.

    Thanks a lot,

    -E

  12. #12
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    You can do a simple stream of commands trivially with a QTcpSocket and state machine. If you want a full implementation of Telnet (RFC 854) with its interupt handling, and virtual terminal requirements then that is a more complicated and specific problem.

    Qt Code:
    1. #include <QtCore>
    2. #include <QtNetwork>
    3. #include <QDebug>
    4.  
    5. class Example: public QObject {
    6. Q_OBJECT
    7. public:
    8. Example(QObject *p = 0): QObject(p) {
    9. connect(&sock, SIGNAL(connected()), this, SLOT(connected()));
    10. connect(&sock, SIGNAL(disconnected()), this, SLOT(disconnected()));
    11. connect(&sock, SIGNAL(readyRead()), this, SLOT(readyRead()));
    12. }
    13.  
    14. void run() {
    15. sock.connectToHost("www.google.com", 80);
    16.  
    17. }
    18. public slots:
    19. void connected() {
    20. QByteArray ba("GET / HTTP/1.0\r\n\r\n");
    21. sock.write(ba);
    22. qDebug() << "Wrote:" << ba;
    23. }
    24. void disconnected() {
    25. qDebug() << "Disconnected";
    26. qApp->exit();
    27. }
    28. void readyRead() {
    29. QByteArray ba = sock.readAll();
    30. qDebug() << "Read:" << ba;
    31. }
    32.  
    33. private:
    34. QTcpSocket sock;
    35. };
    36.  
    37. int main(int argc, char *argv[])
    38. {
    39. QCoreApplication app(argc, argv);
    40.  
    41. Example e;
    42. e.run();
    43.  
    44. return app.exec();
    45. }
    46. #include "main.moc"
    To copy to clipboard, switch view to plain text mode 

  13. The following user says thank you to ChrisW67 for this useful post:

    Ethan (13th July 2011)

  14. #13
    Join Date
    Dec 2008
    Location
    France
    Posts
    93
    Thanked 23 Times in 22 Posts
    Qt products
    Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Exactly, I'm not sure we are really agree with what Telnet is.

    Telnet run usually on port 23, it is a TCP server communicating using a given protocol (can ask you login and give you a shell, interpret some special sequences characters ....).
    If you just want to connect to a port (2000) and send some data of your own you just have to use QTcpSocket that all.

    Please give more detail on what you want to do on the port you used and which commands (actions) you want a run. Or maybe, simply post the data you sent in your hyperterminal to be sure there is no misunderstanding here.

  15. #14
    Join Date
    Jun 2011
    Posts
    26
    Thanks
    3
    Thanked 3 Times in 3 Posts

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Hello again Nix,

    First of all, thank you for your time. I thought the same as you with regards to the Telnet protocol, it is usually on port 23, but in the case of the device i am trying to communicate the connection is carried out on port 2000.

    I am working with a device from roving networks. What I want to do exactly is in this link: http://www.rovingnetworks.com/Docs/WiFly-RN-UM.pdf

    Pages 6-9 shows what I want to do. It is just to create an ad-hoc connection between the device and my pc, connect to it and sends ASCII commands that provide me some response (for example the value of some digital inputs the device has). By using Teraterm or Hyperterminal emulators I can do this (it is, connect doing a telnet 169.254.1.1 2000 and send ASCII commands) . What I want to do is just the same but through a QT interface that manages this Telnet connection.

    For example, one ASCII command I would like to send is "show q", when writing this in the hyperterminal I can see this answer:

    <2.21> show q
    87377a,
    <2.21>

    Then, with this value I would try to do something in the QT interface, for example a plot. And that is mainly what I want to do, to receive these sort of data by the QT interface.

    As you can read in page 9, what is done is a telnet connection throught wifi, but on port 2000 instead of port 23.

    Thanks a lot,

    -E
    Last edited by Ethan; 13th July 2011 at 16:44.

  16. #15
    Join Date
    Sep 2009
    Location
    Wroclaw, Poland
    Posts
    1,394
    Thanked 342 Times in 324 Posts
    Qt products
    Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows Android

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    @up: reported to forum staff, advertisements are forbidden

  17. #16
    Join Date
    Dec 2008
    Location
    France
    Posts
    93
    Thanked 23 Times in 22 Posts
    Qt products
    Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Ok, it's just a problem of misunderstanding. They use telnet term in the doc but it's only a classic tcp socket you need. So you have to use QTcpSocket and probably add a state machine too, in order to manage the protocol.
    A good next move will be : read the documentation of QTcpSocket, QAbstractSocket and take a look to Fortune Client Example (in qt sources).

  18. The following user says thank you to nix for this useful post:

    Ethan (13th July 2011)

  19. #17
    Join Date
    Jun 2011
    Posts
    26
    Thanks
    3
    Thanked 3 Times in 3 Posts

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    May I ask why do you know it is not a Telnet protocol ? ChrisW67 answered the same as you. Thanks for the info, I am going to take a look to the documentation you mentioned.

    -E

  20. #18
    Join Date
    Dec 2008
    Location
    France
    Posts
    93
    Thanked 23 Times in 22 Posts
    Qt products
    Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    Because when you look at the way your device communicate in the documentation it has nothing to do with telnet standard protocol .

    In fact this is a bit confusing because you can use a command like
    telnet 169.254.1.1 2000
    to communicate with your device but it's just the name of a program and that not mean your are using full Telnet protocol. In your case it's just a socket, telnet programm send the data you give to the other side and display data it received. You can do that easily with QTcpSocket.

  21. #19
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    If you never send anything but ASCII characters and expect them in return then the standard telnet client is just a glorified TCP socket giving a transparent pipe. If you send any of the telnet escape codes (bytes with values 240 - 255) then telnet can diverge from being a transparent pipe.
    Last edited by ChrisW67; 14th July 2011 at 00:42.

  22. #20
    Join Date
    Jun 2011
    Posts
    26
    Thanks
    3
    Thanked 3 Times in 3 Posts

    Default Re: QT interface with telnet (hyperterminal) connection. Plotting received data

    The code posted by ChrisW67 works fine for me. In my case, I changed this part:
    Qt Code:
    1. void connected() {
    2. QByteArray ba("GET / HTTP/1.0\r\n\r\n");
    3. sock.write(ba);
    4. qDebug() << "Wrote:" << ba;
    To copy to clipboard, switch view to plain text mode 

    by this one:
    Qt Code:
    1. public slots:
    2. void connected()
    3. {
    4. QByteArray ba("$$$");
    5. sock.write(ba);
    6. qDebug() << "Wrote:" << ba;
    7. }
    To copy to clipboard, switch view to plain text mode 

    And everything seems to work fine, I can see I receive Read: "*Hello*" and Read: "CMD", which means that the device is answering to the command "$$$" I sent. However, what I would like to do is to send another ASCII command and then receive data. I thought about doing this:

    Qt Code:
    1. public slots:
    2. void connected()
    3. {
    4. QByteArray ba("$$$");
    5. sock.write(ba);
    6. qDebug() << "Wrote:" << ba;
    7. QByteArray bb("show q\r");
    8. sock.write(bb);
    9. qDebug() << "Wrote:" << bb;
    10. }
    To copy to clipboard, switch view to plain text mode 

    But this does not work, after sending "show q" in the last variation of the connected method I should receive (appart from Read: "*Hello*" and Read: "CMD") something like "8735b7", however i receive only "Hello", and even I dont receive CMD (which is the response when "$$$" is sent), and that is why i know i am doing something wrong when trying to write two times in the connected method.

    My goal is to send different commands and receive data (send command and receive response, send another command and receive response...). Im planning to do it with a widget, but first I would like to do it just by code or by using the console. Any suggestion?

    Kind regards,

    -E

Similar Threads

  1. Telnet connection does not establish...
    By gentlesea in forum Qt Programming
    Replies: 3
    Last Post: 11th July 2011, 10:54
  2. Methods to display received data
    By pupqt in forum Qt Programming
    Replies: 3
    Last Post: 18th April 2011, 10:50
  3. Plotting socket data
    By catto in forum Qwt
    Replies: 4
    Last Post: 6th March 2011, 09:01
  4. Replies: 2
    Last Post: 6th November 2010, 06:06
  5. Widget for data plotting
    By Benjamin in forum Qt Programming
    Replies: 3
    Last Post: 12th February 2009, 16:38

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.