(C++) Клиент-Серверное взаимодействие. Многопоточность. Когда? Как?
Кроссплатформенность достигается путем использования кроссплатформенных библиотек. Используйте возможности C++ Standard Library, изучите boost. 
В частности, для работы с сетью и распределения задач boost asio.
Нужна или нет многопоточность - вопрос неоднозначный. Если производительности одного потока хватает, то лучше в нее не влезать. А для того, чтобы избежать задержек, использовать асинхронное общение с файловой системой и сетью, концепцию сигналов-слотов (boost asio, boost signals)
1. Отрисовку точно стоит вынести в отдельный от чтения данных поток2. По поводу бесконечного цикла - именно так. При вызове recvfrom у вас будет блокирован ваш поток пока не придут данные, так что ничего страшного от использования бесконечного цикла у вас не будет. Именно по этому и нужно выносить это все дело в отдельный процесс/поток.3. Кросплатформенная разработка в вижле? Увы нет, во всяком случае насколько я знаю. Почитайте про cmake и просто make (cmake плохо дружит с вижлой, иногда бывают проблемы и после генерации проекта приходится тратить время еще на настройку, так что чаще проще уж один раз настроить и таскать с собой настройки проекта).
Вообще тут проще побродить по опенсорсным проектам кросплатформенным и посмотреть как там все это дело реализованно.3.5. ну тут все просто. в linux POSIX, в windows - WinApi (или WinRT если вам хватит поддержки win8+). То есть скажем... код сервера работающий с сокетами у вас под эти две платформы будет различаться на 90% так как все завязано на системное api. То есть вам нужно сделать какую-то прослойку инкапсулирующую сетевую часть, и уже ее реализацию подменять при сборке под конкретную платформу. Либо взять готовое решение для этой прослойки. А вот при реализации бизнес-логики различия между платформами зависят только от самой логики.