The same thing happens to me if the client does nothing (no events to send, ect) even when calling enet_host_service() on a regular basis. I just added an unreliable "ping packet" every once in a while which solved it.

------------------------------------------------------------------------

Nicholas J Ingrassellino
LifebloodNetworks.com <http://www.lifebloodnetworks.com/> || [email protected] <mailto:[email protected]>

"The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying."
- John Carmack on software patents


On 11/05/2010 10:10 AM, Nuno Silva wrote:
Hey there.
On your while(true) on the client you must also call enet_host_service in order for the client to keep its connection alive.

2010/11/5 Вячеслав Блинников <[email protected] <mailto:[email protected]>>

    Hello!

    I wrote the base client accordingly the tutorial and the client which
    read inputting through console characters and send it to the server.
    Everything is fine but just first 30 seconds - then happen the
    disconnection (message "Client information disconnected" shown).
    What is wrong with my code?



    Server code:

    #include <cstdio>
    #include "enet\enet.h"
    int main(int argc, int** argv)
    {
           if (enet_initialize () != 0)
       {
           printf ("An error occurred while initializing ENet.\n");
           goto END;
       }
           ENetAddress address;
           address.host = ENET_HOST_ANY;
           address.port = 1234;
           ENetHost* server = enet_host_create ( & address, 32, 2, 0, 0);
       if (server == NULL)
       {
           printf("An error occurred while trying to create an ENet
    client host.\n");
           goto END;
       }
           ENetEvent event;
    WAIT_FOR_AN_EVENT:
           enet_host_service(server, &event, 5);
           switch (event.type)
           {
           case ENET_EVENT_TYPE_CONNECT:
                   printf ("A new client connected from %x:%u.\n",
    event.peer ->
    address.host, event.peer -> address.port);
                   event.peer -> data = "Client information";
                   break;

           case ENET_EVENT_TYPE_RECEIVE:
                   printf ("A packet of length %u was received from %s
    on channel %u.
    Containings:\n  %s", event.packet -> dataLength, event.peer -> data,
    event.channelID, event.packet -> data);
                   enet_packet_destroy (event.packet);
                   break;

           case ENET_EVENT_TYPE_DISCONNECT:
                   printf ("%s disconected.\n", event.peer -> data);
                   event.peer -> data = NULL;
                   break;

           case ENET_EVENT_TYPE_NONE:
                   break;
           }
           goto WAIT_FOR_AN_EVENT;

           printf("host halted.\n");

    END:
           getchar();
           return 0;
    }



    Client code:

    #include <cstdio>
    #include "enet\enet.h"
    #include <vector>
    int main(int argc, int** argv)
    {
           //where reading console data will be stored:
           std::vector<char> buffer;

           if (enet_initialize () != 0)
       {
           printf ("An error occurred while initializing ENet.\n");
           goto END;
       }
           ENetHost* client        = enet_host_create ( NULL, 1, 2,
    57600 / 8, 14400 / 8);
           if(client == 0l)
           {
                   printf("An error occurred while trying to create an
    ENet server host.\n");
                   goto END;
           }
           ENetAddress address;
           enet_address_set_host(&address, "localhost");
           address.port    = 1234;

           ENetPeer* peer  = enet_host_connect(client, &address, 2, 0);
           if(peer == 0l)
           {
                   printf("No available peers for initiating an ENet
    connection.\n");
                   goto END;
           }

           ENetEvent event;
           if (enet_host_service (client, & event, 5000) > 0 &&
    event.type ==
    ENET_EVENT_TYPE_CONNECT)
           {
                   puts ("Connection to localhost:1234 succeeded.");
           }
           else
           {
                   enet_peer_reset (peer);

                   puts ("Connection to localhost:1234 failed.");
                   goto END;
           }

           printf("Input some data which will be sent to server...\n");

    INPUT_DATA:
           buffer.clear();
           while(true)
           {
                   char character = getchar();
                   buffer.push_back(character);
                   if(character == '\n')
                   {
                           break;
                   }
           }
           buffer.push_back('\0');

           ENetPacket * packet = enet_packet_create(&buffer[0],
    buffer.size(),
    ENET_PACKET_FLAG_RELIABLE);
           enet_peer_send (peer, 0, packet);
           enet_host_flush(client);
           goto INPUT_DATA;

    END:
           getchar();

           return 0;
    }
    _______________________________________________
    ENet-discuss mailing list
    [email protected] <mailto:[email protected]>
    http://lists.cubik.org/mailman/listinfo/enet-discuss



_______________________________________________
ENet-discuss mailing list
[email protected]
http://lists.cubik.org/mailman/listinfo/enet-discuss
_______________________________________________
ENet-discuss mailing list
[email protected]
http://lists.cubik.org/mailman/listinfo/enet-discuss

Reply via email to