[ENet-discuss] client-server doesn't work

Jacky J flamuss at gmail.com
Thu Dec 13 10:17:49 PST 2007


Seems like i had trouble with really high wait times for enet_host_service.
This may not be the problem but try changing your server code to
enet_host_service( enethost, &event, 10 ) instead of 10000


On 12/13/07, Shawn Yarbrough <shawnyar217 at yahoo.com> wrote:
>
> Hi,
>
> This is my first try with ENet, enet-1.1 stable release, on Linux.
>
> My client-server ENet test programs aren't working as expected.  The
> client connects to the server and sees a connection event, but the server
> never sees the connection event.
>
> I've included sample runs and code below.  If I'm doing something
> boneheaded, I was hoping somebody could point out my mistake.
>
> Also I was looking thru the ENet source code trying to understand it.  It
> looks like the UNIX accept() function is never called, or actually it is
> called by enet_socket_accept(), but then enet_socket_accept() is never
> called.  I assume I'm missing something.  I'm not supposed to call the ENet
> socket functions myself, am I?  The tutorial doesn't mention them at all.
>
> Regards,
>
> Shawn Yarbrough
>
>
>
>
>
>
> $ ./enet_server
> listening on: [0.0.0.0:1234]
> accepting
> accepting
> (NOTE: here is where ./enet_client was run!)
> accepting
> accepting
> accepting
> accepting
> event:
> unexpected event type: 0
> accepting
>
>
> $ ./enet_client
> connecting to: [127.0.0.1:1234]
> connecting
> connected to: [127.0.0.1:1234]
>
>
>
>
>
> // enet_client.cpp
>
> #include <iostream>
> #include <sstream>
> #include <unistd.h>
> #include "enet/enet.h"
>
> bool enet_initialized = false;
> ::ENetHost *enethost;
>
> void
> check_enet_initialized()
> {
>     // ENet initialization.
>     if( !enet_initialized )
>     {
>         if( ::enet_initialize() != 0 )
>             throw "failed to initialize ENet";
>         enet_initialized = true;
>         atexit( ::enet_deinitialize );
>     }
> }
>
> void
> connect_enet()
> {
>     check_enet_initialized();
>
>     // Initiate the ENet connection.
>     enethost = ::enet_host_create( NULL,       // don't bind as a server
>                                    2,          // one connection, only
>                                    0,          // default incoming
> bandwidth
>                                    0     );    // default outgoing
> bandwidth
>     if( enethost == NULL )
>         throw "failed to open ENet connection";
>
>     ::ENetAddress remote_address;
>     ::enet_address_set_host( &remote_address, "127.0.0.1" );
>     remote_address.port = 1234;
>
>     ::ENetPeer *enetpeer;
>     enetpeer = ::enet_host_connect( enethost, &remote_address, 2 );
>     if( enetpeer == NULL )
>     {
>         ::enet_host_destroy( enethost );
>         throw "no available ENet peers";
>     }
>     char buf[256];
>     ::enet_address_get_host_ip( &remote_address, buf, sizeof(buf) );
>     std::cout << "connecting to: "
>               << "[" << buf << ":" << remote_address.port << "]"
>               << std::endl;
>
>
>     ////
>     ENetEvent event;
> doconnect:
>     std::cout << "connecting"
>               << std::endl;
>     while( ::enet_host_service( enethost, &event, 1000 ) > 0 )
>     {
>         switch( event.type )
>         {
>             case ENET_EVENT_TYPE_CONNECT:
>             {
>                 char buf[256];
>                 ::enet_address_get_host_ip( &event.peer->address, buf,
> sizeof(buf) );
>
>                 std::stringstream ss;
>                 ss << buf
>                    << ":"
>                    << event.peer->address.port;
>                 std::cout << "connected to: "
>                           << "[" << ss.str() << "]"
>                           << std::endl;
>                 event.peer->data = new std::string(ss.str());
>                 goto connected;
>             }
>             case ENET_EVENT_TYPE_DISCONNECT:
>             {
>                 throw "unexpected disconnection received on connecting
> socket";
>             }
>             case ENET_EVENT_TYPE_RECEIVE:
>             {
>                 throw "unexpected data packet received on connecting
> socket";
>             }
>         }
>     }
>     goto doconnect;
>     ////
>
> connected:;
> }
>
> int
> main( int argc, char *argv[] )
> {
>     connect_enet();
>     return 0;
> }
>
>
> // enet_server.cpp
>
> #include <iostream>
> #include <sstream>
> #include <unistd.h>
> #include "enet/enet.h"
>
> bool enet_initialized = false;
> ::ENetHost *enethost;
>
> void
> check_enet_initialized()
> {
>     // ENet initialization.
>     if( !enet_initialized )
>     {
>         if( ::enet_initialize() != 0 )
>             throw "failed to initialize ENet";
>         enet_initialized = true;
>         atexit( ::enet_deinitialize );
>     }
> }
>
> void
> listen_enet()
> {
>     check_enet_initialized();
>
>     // Initiate the ENet connection.
>     ::ENetAddress local_address;
>     local_address.host = ENET_HOST_ANY;
>     local_address.port = 1234;
>
>     enethost = ::enet_host_create( &local_address,       // bind as a
> server
>                                    32,                   // max number of
> connections allowed
>                                    0,                    // default
> incoming bandwidth
>                                    0               );    // default
> outgoing bandwidth
>     if( enethost == NULL )
>         throw "failed to open ENet connection";
>
>     char buf[256];
>     ::enet_address_get_host_ip( &local_address, buf, sizeof(buf) );
>     std::cout << "listening on: "
>               << "[" << buf << ":" << local_address.port << "]"
>               << std::endl;
> }
>
> void
> accept_enet()
> {
>     ENetEvent event;
> doaccept:
>     std::cout << "accepting"
>               << std::endl;
>     while( ::enet_host_service( enethost, &event, 10000 ) > 0 )
>     {
>         std::cout << "event:" << std::endl;
>         switch( event.type )
>         {
>             case ENET_EVENT_TYPE_CONNECT:
>             {
>                 char buf[256];
>                 ::enet_address_get_host_ip( &event.peer->address, buf,
> sizeof(buf) );
>
>                 std::stringstream ss;
>                 ss << buf
>                    << ":"
>                    << event.peer->address.port;
>                 std::cout << "connection from: "
>                           << "[" << ss.str() << "]"
>                           << std::endl;
>                 event.peer->data = new std::string(ss.str());
>                 return;
>             }
>             case ENET_EVENT_TYPE_DISCONNECT:
>             {
>                 throw "unexpected disconnection received on listen
> socket";
>             }
>             case ENET_EVENT_TYPE_RECEIVE:
>             {
>                 throw "unexpected data packet received on listen socket";
>             }
>             default: std::cout << "unexpected event type: " << event.type<< std::endl;
>         }
>     }
>     goto doaccept;
> }
>
> int
> main( int argc, char *argv[] )
> {
>     listen_enet();
>     accept_enet();
>     return 0;
> }
>
>
> ------------------------------
> Looking for last minute shopping deals? Find them fast with Yahoo! Search.<http://us.rd.yahoo.com/evt=51734/*http://tools.search.yahoo.com/newsearch/category.php?category=shopping>
>
> _______________________________________________
> 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/20071213/68f1310d/attachment.htm 


More information about the ENet-discuss mailing list