Подключение обычные tcp сокеты (в udp пока не лезте, но с ними тоже реально).
На сервер передаете только нажатые кнопки пользователей, буквально, побайтно (назначьте коды на все возможные действия пользователей, досканально, в зависимости от вашего игрового процесса это могут быть даже нажал кнопку - отпустил кнопку).
От сервера передаете изменения содержимого экрана, по объектам, змейки, корм и прочее. Само собой при подключении вместо дельты сервер должен вернуть текущие координаты. При потере связи тогда все будет автоматом восстанавливаться. Разработайте формат сообщений, воспользуйтесь готовыми сериализаторами, не изобретайте паровоз, хотя...
На клиенте перерисовываете все это каждый раз как получаете данные от сервера.
Вся игра должна крутиться на сервере, тогда у вас не будет никаких проблем с расинхронизацией, читерством (кроме автоматизации) и прочим.
Недостаток - у всех пользователей будет небольшой лаг на действия, в зависимости от пингов.
К сожалению не все игры можно так реализовать, но частично да.