Skip to content

Instantly share code, notes, and snippets.

@cshenton
Created August 8, 2021 10:45
Show Gist options
  • Select an option

  • Save cshenton/2c9a1740e0d4de7b2321aa3831b588f5 to your computer and use it in GitHub Desktop.

Select an option

Save cshenton/2c9a1740e0d4de7b2321aa3831b588f5 to your computer and use it in GitHub Desktop.
Enet Simple Example
#include <stdio.h>
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define ENET_IMPLEMENTATION
#include "enet.h"
int main()
{
if (enet_initialize() != 0)
{
return 1;
}
ENetHost *client = enet_host_create(NULL, 1, 2, 0, 0);
if (!client)
{
return 1;
}
ENetAddress address = {.port = 7777};
enet_address_set_host(&address, "127.0.0.1");
ENetPeer *peer = enet_host_connect(client, &address, 2, 0);
if (!peer)
{
return 1;
}
ENetEvent event;
if (enet_host_service(client, &event, 5000) <= 0 || event.type != ENET_EVENT_TYPE_CONNECT)
{
enet_peer_reset(peer);
return 1;
}
printf("Connected to server\n");
enet_host_service(client, &event, 5000);
enet_peer_disconnect(peer, 0);
uint8_t disconnected = false;
while (enet_host_service(client, &event, 3000) > 0)
{
switch (event.type)
{
case ENET_EVENT_TYPE_RECEIVE:
printf("Received packet from server\n");
enet_packet_destroy(event.packet);
break;
case ENET_EVENT_TYPE_DISCONNECT:
printf("Disconnected by server\n");
disconnected = true;
break;
default:
break;
}
}
if (!disconnected)
{
printf("Clean disconnect failed, hard disconnecting\n");
enet_peer_reset(peer);
}
enet_host_destroy(client);
enet_deinitialize();
return 0;
}
#include <stdio.h>
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define ENET_IMPLEMENTATION
#include "enet.h"
int main()
{
if (enet_initialize() != 0)
{
return 1;
}
ENetHost *server = enet_host_create(&(ENetAddress){.host = ENET_HOST_ANY, .port = 7777}, 32, 2, 0, 0);
if (!server)
{
return 1;
}
printf("Starting server\n");
ENetEvent event;
while (enet_host_service(server, &event, 1000) >= 0)
{
switch (event.type)
{
case ENET_EVENT_TYPE_CONNECT:
printf("Client connected\n");
event.peer->data = "Client information";
break;
case ENET_EVENT_TYPE_RECEIVE:
printf("Packet received\n");
enet_packet_destroy(event.packet);
break;
case ENET_EVENT_TYPE_DISCONNECT:
case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT:
printf("Client disconnected\n");
event.peer->data = NULL;
break;
case ENET_EVENT_TYPE_NONE:
break;
}
}
enet_host_destroy(server);
enet_deinitialize();
return 0;
}
@cshenton
Copy link
Copy Markdown
Author

cshenton commented Aug 8, 2021

The following compile (without warnings, unlike the default examples) on windows (assuming enet.h is in the same directory) with clang -o server.exe server.c and clang -o client.exe client.c.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment