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

Nuno Silva little.coding.fox at gmail.com
Fri Nov 5 08:24:28 PDT 2010


Remember that getchar() blocks your program so it doesnt get called while
it's waiting for you to press Enter.

2010/11/5 Вячеслав Блинников <slavmfm at gmail.com>

> 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
> >
> >
> _______________________________________________
> ENet-discuss mailing list
> ENet-discuss at cubik.org
> http://lists.cubik.org/mailman/listinfo/enet-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cubik.org/pipermail/enet-discuss/attachments/20101105/d7d9dc7a/attachment.html>


More information about the ENet-discuss mailing list