Подтвердить что ты не робот

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

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

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

Благодарю.

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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