You only write one byte to your packets when you send them:
om.Write((byte)PacketTypes.Start);
But read two when you receive them:
// One read here
if (incMsg.ReadByte() == (byte)PacketTypes.Ready)
{
p1Ready = "Ready";
}
// Second read here
else if (incMsg.ReadByte() == (byte)PacketTypes.Start)
Edit
To resolve the issue change your code to this:
case NetIncomingMessageType.Data:
byte type = incMsg.ReadByte(); // Read one byte only
if (type == (byte)PacketTypes.Ready)
{
p1Ready = "Ready";
}
else if (type == (byte)PacketTypes.Start)
{
CurrentGameState = GameState.City;
Console.WriteLine("Game started");
numPlayers = 2;
}
break;