Usually in multiplayer you're going to have a set group of user-to-server messages or server-to-user messages -- you've probably already got some like:
Code:
client->server: I am connecting!
server->just one client: You are client number <ID>.
client->server: I'm a user and I just played a card.
client->server: Please roll the dice.
server->all clients: Client <ID> just played a card, and it was <card ID>.
server->all clients: Client <ID> has disconnected.
server->all clients: The dice roll was <roll>.
I'd add the following couple messages to this, patterned off of the previous:
Code:
server->all clients: It is now client <ID>'s turn.
server->any number of clients: Please display the message <Message>.
What's important is that the server code knows how to send a message to any number of active users, and that both the client and server code know how to look at a message like this and extract the client ID, card ID, message text, etc. (whatever I wrote in <angle brackets>) Then the tricky bit is just getting the server to keep track of what user's turn it thinks it is -- but you would probably do that the same way you would in a hot seat kind of game.
It sounds like you already have a system that kind of accomplishes this, but to me it's weird that it only works on LAN -- that makes me think that the server is not reporting back to the users when a turn ends, or something. It's usually hard in a turn-based game for users to get out of sync. It also sounds like you've kinda got some miscellaneous bugs (like the dice causing problems) that aren't really related to your multiplayer problem. (they could be related, I just don't know yet how they would be.)
I think your "rewrite players as objects, not arrays" problem is probably separate from this.