/* client.cpp */ #include #include #include int main(int argc, char* argv[]) { ENetHost *client; ENetAddress address; ENetPeer *peer; ENetEvent event; char message[1024]; int serviceResult; puts("Starting client"); if (enet_initialize() != 0) { fprintf(stderr, "Error initialising enet"); exit(EXIT_FAILURE); } client = enet_host_create(NULL, /* create a client host */ 1, /* number of clients */ 2, /* number of channels */ 57600 / 8, /* incoming bandwith */ 14400 / 8); /* outgoing bandwith */ if (client == NULL) { fprintf(stderr, "Could not create client host"); exit(EXIT_FAILURE); } enet_address_set_host(&address, "localhost"); address.port = 1234; peer = enet_host_connect(client, &address, /* address to connect to */ 2, /* number of channels */ 0); /* user data supplied to the receiving host */ if (peer == NULL) { fprintf(stderr, "No available peers for initiating an ENet " "connection.\n"); exit(EXIT_FAILURE); } /* Try to connect to server within 5 seconds */ if (enet_host_service(client, &event, 5000) > 0 && event.type == ENET_EVENT_TYPE_CONNECT) { puts("Connection to server succeeded."); } else { /* Either the 5 seconds are up or a disconnect event was */ /* received. Reset the peer in the event the 5 seconds */ /* had run out without any significant event. */ enet_peer_reset(peer); fprintf(stderr, "Connection to server failed."); exit(EXIT_FAILURE); } while (true) { serviceResult = 1; /* Keep doing host_service until no events are left */ while (serviceResult > 0) { serviceResult = enet_host_service(client, &event, 0); if (serviceResult > 0) { 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 = (void*)"New User"; break; case ENET_EVENT_TYPE_RECEIVE: printf("A packet of length %u containing '%s' was " "received from %s on channel %u.\n", event.packet->dataLength, event.packet->data, event.peer->data, event.channelID); /* Clean up the packet now that we're done using it. > */ enet_packet_destroy(event.packet); break; case ENET_EVENT_TYPE_DISCONNECT: printf("%s disconnected.\n", event.peer->data); break; } } else if (serviceResult > 0) { puts("Error with servicing the client"); exit(EXIT_FAILURE); } } printf("Say> "); #ifdef _WIN32 gets_s(message, 1024); #else gets(message); #endif if (strcmp(message, "exit") == 0 || strcmp(message, "quit") == 0) { break; } if (strlen(message) > 0) { ENetPacket *packet = enet_packet_create(message, strlen (message) + 1, ENET_PACKET_FLAG_RELIABLE); enet_peer_send(peer, 0, packet); } } enet_peer_disconnect(peer, 0); /* Allow up to 3 seconds for the disconnect to succeed */ /* and drop any packets received packets */ while (enet_host_service(client, &event, 3000) > 0) { switch (event.type) { case ENET_EVENT_TYPE_RECEIVE: enet_packet_destroy(event.packet); break; case ENET_EVENT_TYPE_DISCONNECT: puts("Disconnection succeeded."); break; } } enet_host_destroy(client); enet_deinitialize(); return 0; }