Я пытаюсь использовать функции socket.h в рамках Windows. По существу я в настоящее время смотрю на пример кода в https://beej.us/guide/bgnet/html/multi/clientserver.html#datagram. Я понимаю, что socket.h является функцией Unix - там так или иначе, я могу легко эмулировать ту среду при компиляции этого примера кода? Другой IDE / компилятор изменяют что-нибудь?
Иначе я предполагаю, что должен использовать виртуализированную среду Linux, которая может быть лучшей так или иначе, когда код будет, скорее всего, работать в среде UNIX.
Спасибо.
У вас есть два варианта:
Cygwin: позволяет вам компилировать ваши исходные тексты Unix в основном нетронутыми, но привязывает вас к библиотеке эмуляции Cygwin. Это имеет два последствия: общая производительность - без использования только сети - вероятно, будет ниже оптимальной; и целевая среда должна иметь (во время выполнения) установленную библиотеку Cygwin DLL.
Winsock: это требует замены sys/socket.h
(библиотека BSD sockets, стандарт UNIX для стека TCP/IP) на winsock2.h
, и переписать некоторые части кода - не много, но некоторые.
Некоторые связанные вопросы с ценной информацией:
Написание кроссплатформенных сетевых приложений не так просто с тем, что предоставляет вам стандарт BSD. Конечно, это будет работать, но вам придется сделать некоторые замены, например, заменить ioctl (если нужно) на ioctlsocket (в windows). Больше различий здесь.
Мой совет - использовать библиотеку, которая скрывает эти уродливые различия и обеспечивает единый способ взаимодействия. Лично я использую ACE. У вас есть множество примеров, которые показывают, как создать сервер и клиента. Копируйте из примеров и смотрите, как это делается там. Их списки рассылки также очень полезны (не забудьте использовать PRF - см. дерево исходников для Problem-Report-Form). Вы можете взять книги для получения дополнительной информации. Важное замечание: используя ace, вы можете использовать функции-обертки ACE, такие как socket, setsockopt, ioctl и т.д. без опасения, что они не будут работать. К сожалению, это добавляет зависимость от библиотеки, что не всегда возможно. Но у ACE есть более мощные возможности, которые, я уверен, вам понравятся, как только вы их откроете. Подсказки: Reactor, Proactor.