login about faq

Hello, I'm currently in a bit of a problem.

I'm trying to simply connect to a hostname/port provided and receive the string "pong" upon connecting and after sending "pingservice".

It seems to never be received and the debug from lastErrorText is extremely vague, even with verboseLogging on:

[2016-12-22 07:43:37] [ok] [PingLoop] Host 1 | Hostname : xx | Port: 2550 | Location: 2
[2016-12-22 07:43:37] [ok] [PingLoop] String sent!
[2016-12-22 07:43:47] [ok] [PingLoop] Couldn't recv. Debug:

ChilkatLog:

Close(31ms):

ChilkatVersion: 9.5.0.64

terminateConnection(31ms):

  TCP connection cleanly closed by peer.

  Cleanly terminated TCP connection.

--terminateConnection

--Close

--ChilkatLog

However. I find this strange since I decided to do a bit of debugging on my own using Wireshark (as it's not a SSL protected connection) and low-behold, the bytes "pong" are in several of the packets coming from the hostname I'm connected to.

http://i.imgur.com/A6oTsSW.png

However, it never seems like Chilkat recognizes this and cannot read the data.

Here is the code snippet provided:

g_Socket.put_VerboseLogging(true);

    for (int i = 0; i < size; i++)
    {
        auto host = hosts.Get(i);

        const char* hostname = host.hostname().c_str();
        int port = host.port();
        Location location = host.location();

        cout << "Host " << i << " | Hostname: " << hostname << " | Port: " << port << " | Location: " << (int)location << endl;
        Log("[PingLoop] Host " + std::to_string(i) + " | Hostname : " + string(hostname) + " | Port: " + std::to_string(port) + " | Location: " + std::to_string((int)location), LogLevelFlags::SUCCESS);

        bool success = g_Socket.Connect(hostname, port, false, 10000);

        g_Socket.put_MaxReadIdleMs(10000);
        g_Socket.put_MaxSendIdleMs(10000);

        if (success)
        {
            auto start = std::chrono::high_resolution_clock::now();
            if (g_Socket.SendString("pingservice"))
            {
                Log("[PingLoop] String sent!", LogLevelFlags::SUCCESS);

                CkByteData byteData;
                if(g_Socket.ReceiveBytes(byteData))
                {
                    Log("[PingLoop] recv", LogLevelFlags::SUCCESS);
                    newLatencies[location] = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - start).count();
                    Log("[PingLoop] Took " + std::to_string(newLatencies[location]) + " ms", LogLevelFlags::SUCCESS);
                }
                else
                {
                    g_Socket.Close(TIMEOUT);
                    newLatencies[location] = TIMEOUT;
                    Log("[PingLoop] Couldn't recv. Debug:\n" + string(g_Socket.lastErrorText()), LogLevelFlags::SUCCESS);
                    continue;
                }

What exactly am I doing wrong here? I've tried ReceiveString before, still same result. Receiving doesn't seem to work, but sending does.

Any bit of help would be much appreciated ^^

asked Dec 22 '16 at 08:05

jmazzola's gravatar image

jmazzola
11

edited Dec 22 '16 at 08:11

Be the first one to answer this question!
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or __italic__
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×82
×14
×7
×3

Asked: Dec 22 '16 at 08:05

Seen: 478 times

Last updated: Dec 22 '16 at 08:11

powered by OSQA