You code looks to be more C than C++.
One problem I see is your parameters to strcat are backwards. Concatenating message[256] to number[3] isn't safe.
Don't use strcat. Calculate the length and use memcpy.
Since you have three bytes for the numeric prefix, consider using leading zeroes.
sprintf (or sprintf_s) would work here.
char packet[259] = {0};
int number = 13;
const char payload[] = "Payload";
int length = sizeof payload;
if ( (length + 4) >= sizeof packet)
fprintf(stderr, "too long!\n");
sprintf(packet, "%03d%-0.*s", number, length - 1, payload);
sendto(s, packet, sizeof packet, 0, to, tolen);
If your message design allows variable length packets, use the value returned by sprintf as the size of the packet.