Поддерживает ли Indy необработанные TCP-сокеты в Windows? - PullRequest
3 голосов
/ 02 ноября 2009

Я программист на C ++, но мой вопрос касается библиотеки сетевых сокетов Delphi Indy.

В сущности, поскольку Microsoft искалечила необработанные сокеты с помощью WinXP SP2, чтобы данные TCP не могли передаваться через них, относится ли это также к Indy? Один из моих друзей порекомендовал его мне, а не с помощью WinSock API.

Если нет, то является ли единственный способ использовать необработанные сокеты TCP с помощью WinPCap API?

Ответы [ 5 ]

3 голосов
/ 03 ноября 2009

Если нет, я знаю, что синапс для Delphi делает . Последняя версия теперь поддерживает D2009 и активно поддерживается.

2 голосов
/ 03 ноября 2009

Как видно из других ответов, существует множество библиотек Delphi для упрощения сетевого программирования. Тем не менее, AFAIK все они предоставляют более дружественный уровень поверх WinSock API (в Windows, через стандартный API сокетов в других ОС) и, таким образом, не могут сделать ничего, что не может сделать WinSock API. В частности, они могут поддерживать или не поддерживать необработанный доступ к сокету, но если ОС не сможет отправить данные через сокет, библиотеки также будут возвращать только ошибки.

Для получения дополнительной информации об ограничениях raw-сокетов в последних версиях ОС Windows см. эту страницу MSDN , в частности, раздел «Ограничения для Raw-сокетов». Совершенно ясно, что

Чтобы обойти эти проблемы, может потребоваться написать драйвер сетевого протокола Windows (драйвер устройства) для конкретного сетевого протокола.

Ни одна из библиотек сетевого программирования Delphi не имеет собственного драйвера сетевого протокола AFAIK. И ни одна из них не поможет вам разрешить проблемы с ограниченными учетными записями пользователей или помехи брандмауэра Windows.

Как вы упоминаете WinPcap в своем вопросе, вы знаете, что он способен делать то, что вы хотите. Для этого существуют оболочки Delphi, такие как Компоненты для мониторинга интернет-пакетов Magenta Systems . Тем не менее, как программист C ++ вам может быть лучше использовать библиотеку непосредственно из C ++, поскольку Delphi ничего не добавляет в отношении программирования сокетов, которое вы хотите делать. В частности, вам не понадобится дополнительный слой, чтобы скрыть различия в платформах, которые предоставляют некоторые библиотеки Delphi, поскольку вы будете программировать непосредственно с помощью libpcap API.

1 голос
/ 03 ноября 2009

Я бы предпочел синапс , чем Indy, его архитектура проще и понятнее.

1 голос
/ 03 ноября 2009

вы должны проверить компоненты ICS

ICS - бесплатный интернет-компонент библиотека для всех Delphi, C ++ Builder, Версии для BDS и RAD Studio (win32). Включает TCP, UDP, необработанные сокеты, клиенты, серверы, а также многие высокие протоколы уровня, такие как FTP, SMTP, POP3, NNTP, HTTP и другие.

http://www.overbyte.be/

0 голосов
/ 02 ноября 2009

Indy работает довольно хорошо. Я использую его совсем немного с небольшими проблемами.

Если вы ищете более простое взаимодействие с сокетами, вы можете использовать следующие компоненты:

  • TTCPClient
  • TCPServer
  • TClientSocket
  • TServerSocket

Все эти компоненты также поставляются с Delphi.

Не знаю напрямую о winpcap, но я верю, что для него есть обертка delphi. В настоящее время я не знаю, где я его видел, но это не должно быть трудно найти с помощью поиска кода Google.

...