Используя sys/socket.h функционирует на окнах

Я пытаюсь использовать функции socket.h в рамках Windows. По существу я в настоящее время смотрю на пример кода в https://beej.us/guide/bgnet/html/multi/clientserver.html#datagram. Я понимаю, что socket.h является функцией Unix - там так или иначе, я могу легко эмулировать ту среду при компиляции этого примера кода? Другой IDE / компилятор изменяют что-нибудь?

Иначе я предполагаю, что должен использовать виртуализированную среду Linux, которая может быть лучшей так или иначе, когда код будет, скорее всего, работать в среде UNIX.

Спасибо.

28
задан Sandburg 26 March 2018 в 12:19
поделиться

3 ответа

У вас есть два варианта:

  1. Использовать Cygwin (библиотека эмуляции Unix).
  2. Портировать на Winsock (стандартная библиотека Windows).

Cygwin: позволяет вам компилировать ваши исходные тексты Unix в основном нетронутыми, но привязывает вас к библиотеке эмуляции Cygwin. Это имеет два последствия: общая производительность - без использования только сети - вероятно, будет ниже оптимальной; и целевая среда должна иметь (во время выполнения) установленную библиотеку Cygwin DLL.

Winsock: это требует замены sys/socket.h (библиотека BSD sockets, стандарт UNIX для стека TCP/IP) на winsock2.h, и переписать некоторые части кода - не много, но некоторые.

Некоторые связанные вопросы с ценной информацией:

Различия между winsock и BSD реализацией сокетов

Некоторые вопросы о Cygwin [Linux в Windows] (сокеты, потоки, другие вопросы программирования и оболочки)

Примеры для Winsock?

39
ответ дан 28 November 2019 в 03:32
поделиться

Я думаю, что вы ищете библиотеку Winsock.

0
ответ дан 28 November 2019 в 03:32
поделиться

Написание кроссплатформенных сетевых приложений не так просто с тем, что предоставляет вам стандарт BSD. Конечно, это будет работать, но вам придется сделать некоторые замены, например, заменить ioctl (если нужно) на ioctlsocket (в windows). Больше различий здесь.

Мой совет - использовать библиотеку, которая скрывает эти уродливые различия и обеспечивает единый способ взаимодействия. Лично я использую ACE. У вас есть множество примеров, которые показывают, как создать сервер и клиента. Копируйте из примеров и смотрите, как это делается там. Их списки рассылки также очень полезны (не забудьте использовать PRF - см. дерево исходников для Problem-Report-Form). Вы можете взять книги для получения дополнительной информации. Важное замечание: используя ace, вы можете использовать функции-обертки ACE, такие как socket, setsockopt, ioctl и т.д. без опасения, что они не будут работать. К сожалению, это добавляет зависимость от библиотеки, что не всегда возможно. Но у ACE есть более мощные возможности, которые, я уверен, вам понравятся, как только вы их откроете. Подсказки: Reactor, Proactor.

1
ответ дан 28 November 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: