[ENet-discuss] ENet - desconnection in 30 seconds after connection.

Вячеслав Блинников slavmfm at gmail.com
Fri Nov 5 08:17:56 PDT 2010


That is strange because previous advice helped me - everything what
was needed is to call "enet_host_service()" in separate thread (I
tried to call it between "getchar()" calls but there still was
disconnections).
But I definetly feel some lags. Sometimes lags are obvious but
sometimes it looks like there are no of them - I think it's depends on
when how close to "enet_host_service()"'s time interval
"enet_peer_send()" will be called.

2010/11/5 Nicholas J Ingrassellino <nick at lifebloodnetworks.com>:
> 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 || nick at lifebloodnetworks.com
>
> "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 Вячеслав Блинников <slavmfm at gmail.com>
>>
>> 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
>> ENet-discuss at cubik.org
>> http://lists.cubik.org/mailman/listinfo/enet-discuss
>
>
> _______________________________________________
> ENet-discuss mailing list
> ENet-discuss at cubik.org
> http://lists.cubik.org/mailman/listinfo/enet-discuss
>
> _______________________________________________
> ENet-discuss mailing list
> ENet-discuss at cubik.org
> http://lists.cubik.org/mailman/listinfo/enet-discuss
>
>


More information about the ENet-discuss mailing list