Ошибка была в длине передаваемого сообщения на стороне сервера. В размер действительно попадал размер указателя на массив вместо размера самого текста. Решил проблему так:
string msg="";
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
msg = msg + to_string(rand() % 100) + "\t";
}
msg += "\n";
}
int sizeofmsg = msg.length();
const char* c_msg = msg.c_str();
send(newConnection, c_msg, sizeofmsg, NULL);
Но затем появилась проблема с артефактами. Их я убрал с помощью зануливания принимающего массива на стороне клиента:
char msg[256];
ZeroMemory(msg, sizeof(msg));
recv(Connection, msg, sizeof(msg), NULL);
cout << msg;