Basically, you need to set up some kind of "token" that dictates which player can move. The player with the token is the only player that can make a valid move and will send that data back to the other player, along with the token. The first player would then be put into a "wait" state...
The player without the token would be waiting for a response from the other player. This can easily be established by simply reading from the socket's input stream.
When the active player makes a move, that move (and thus the token) is send to the waiting player. The active player then enters a wait state, reading the there socket's input stream. The player that has just become active would be notified of the the update and would be allow to make a move. And around it goes...
I would have a call back mechanism from your "network engine" that would notify the "game engine" of network events, such as "move received", "network failure" etc.
I would have a simple method in the "network engine" that would allow me to send data of the move back to the other player. If coded correctly, the "network engine" could block requests from the "game engine" until it was the players turn to move. Equally, you could have checks to determine the players current state as well.
Just some random thoughts :P