Если да, то как ?
Если в лоб, то вряд ли. В гнездах const char*, в тлях char*. Попробуй полазить по исходникам RPC-х функций xdr-преобразований. Они как-то это делают.
Ессесно можно. Но только нельзя забывать о том, что существуют архитектуры с big-endian и little-endian(к ним относится и i386) с различным порядком размещения байтов в структурах. Для одинаковых byte-ордеров проблемы нет, для разных - нужно договориться о порядке следования байтов в передаваемой информации.
К тому же у нас препод в свое время хвастался, что он работал на каких-то военных машинах где тип char занимал 4 байта.Если (и скорее всего) ты передаешь структуры на одинаковые платформы, то ты тупо бурушь ее размер и указатель на нее и шлешь в сокет.
struct packet data;
write((void*)packet, sizeof(packet), socket);
НО это только на одинаковых платформах! Создай 2 протокола один такой-простой другой через XDR