Чтобы понять принципы делай как можно проще. Например:
1) Представь свою структуру данных точными последовательностями. Скажем у тебя это данные типа "фамилия", "имя", "возраст","в_браке". Типы будут такие string, string, int, boolean. 4 поля данных.
2) Теперь тебе надо сереализовать твою структуру. Переводишь все ("фамилия", "имя", "возраст","в_браке") в байты.
3) На клиенте подключаешься к сокетному серверу, открывается соединение. Берешь первое поле "фамилия" (помним что это у тебя уже байты), считаешь его размер(скажем получилось 17 байт). Переводишь число(int) 17 в байты. Пишешь в сокет серверу байтовое число 17. Затем пишешь туда же все свои 17 байт данных. Повторяешь такое со всеми данными.
4) Сервер запущен и ждет соединения. Клиент подключился, сервер начинает ждать данные. Помним что в п1. у нас заранее известна структура данных. Начинаешь читать из сокета байты размерами int. Прочитал получилось число 17. Читаешь из сокета 17 байт, получилось поле "фамилия", снова читаешь из сокета байты размером int. Узнал из него сколько байт надо прочитать и читаешь их. Таким образом делаешь 4 раза(см. п.1). Теперь остается перевести данные из байт в string, string, int, boolean и получишь на сервере "фамилия", "имя", "возраст","в_браке".
5) Сервер отключает клиента или скажем по такому же принципу шлет ответ.
Все выше написанное сильно кривое но для понимания как работает передача данных по сети самое то.
Что бы перестать бояться сокетов и понять их, представь что это обычные файлы, которые ты открываешь, пишешь и читаешь.