Использование функций sys / socket.h в Windows - PullRequest
26 голосов
/ 01 июня 2010

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

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

Спасибо.

Ответы [ 3 ]

36 голосов
/ 01 июня 2010

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

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

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

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

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

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

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

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

1 голос
/ 02 июня 2010

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

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

0 голосов
/ 01 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...