1) Массив полей передавать плохо. Представьте, что через 5-10 дней вам понадобится еще одно поле добавить. Придется код менять и на клиенте и на сервере.
Из этого вывод - упаковка данных должна, по возможности, быть вариативной к данным, чтобы добавление нового поля класса не убивало все на корню. Для этого подходит сотня-другая протоколов, начиная от json (что очень хорошо), и заканчивая protobuf (что тоже очень неплохо), можно даже в XML упаковывать, здесь все от вкуса и цвета зависит. Я предпочитаю json.
2) Обмен лучше делать на стандартyых высокоуровневых протоколах, начиная от HTTP(S) и заканчивая каким нибудь XMPP, можно использовать и очереди сообщений типа RabbitMQ/ZeroMQ и им подобные. Мой фаворит HTTP.
Соответственно, с одной стороны должен быть HTTP сервер или приложение, которое его эмулирует, или сервлет. С другой стороны - клиент, который посылает запросы к вашему серверу. Ну а данные гонять через json.