【问题标题】:Does Indy support raw TCP sockets on Windows?Indy 是否支持 Windows 上的原始 TCP 套接字?
【发布时间】:2009-11-02 19:22:46
【问题描述】:

我是一名 C++ 程序员,但我的问题是关于 Delphi 网络套接字库 Indy。

本质上,由于 Microsoft 使用 WinXP SP2 削弱了原始套接字,因此无法通过它们发送 TCP 数据,那么这是否也适用于 Indy?我的一位朋友向我推荐了它,而不是使用 WinSock API。

如果不是,那么使用 WinPCap API 使用原始 TCP 套接字的唯一方法是什么?

【问题讨论】:

    标签: delphi networking sockets indy


    【解决方案1】:

    如果没有,我知道 synapse 代表 Delphi does。最新版本现在支持 D2009,并且正在积极支持中。

    【讨论】:

    • 这并不意味着什么。 Indy 10 在 Core 中有 4 个文件 IdRaw*.pas。但是 Windows 施加了一些限制(虽然不是所有版本),请参阅msdn.microsoft.com/en-us/library/ms740548%28VS.85%29.aspx 上的“原始套接字限制”。据推测,这些限制与用于调用 WinSock API 的 Delphi 库无关。
    • Synapse 是一个非常棒的工具。此外,如果您计划在 big 服务器上执行多线程和阻塞套接字(= 处理数千个连接),请记住,根据我的经验,突触比 Indy 稳定得多。并且更容易理解和修改代码以满足您的需求:) :)
    【解决方案2】:

    正如您从其他答案中看到的那样,有很多 Delphi 库可以简化网络编程。但是,AFAIK 它们都在 WinSock API 上提供了一个更友好的层(在 Windows 上,在其他操作系统上的标准套接字 API 上),因此无法做 WinSock API 无法做的任何事情。特别是它们可能支持也可能不支持原始套接字访问,但如果操作系统无法通过套接字发送数据,库也只会返回错误。

    有关最新 Windows 操作系统版本上原始套接字限制的更多信息,请参阅this MSDN page,尤其是“原始套接字限制”部分。它非常清楚地表明

    为了解决这些问题,可能需要为特定的网络协议编写一个 Windows 网络协议驱动程序(设备驱动程序)。

    Delphi 网络编程库都没有自带网络协议驱动程序 AFAIK。两者都不会帮助您解决受限用户帐户的权限问题或 Windows 防火墙的干扰。

    当您在问题中提到 WinPcap 时,您知道它能够做您想做的事。它有 Delphi 包装器,例如 Magenta Systems Internet Packet Monitoring Components。然而,作为一名 C++ 程序员,您最好直接从 C++ 中使用该库,因为 Delphi 没有为您想要执行的套接字编程添加任何内容。特别是您不需要额外的层来隐藏某些 Delphi 库提供的平台差异,因为您将直接针对 libpcap API 进行编程。

    【讨论】:

      【解决方案3】:

      Indy 运行良好。我用了很多,没有什么问题。

      如果您正在寻找更基本的套接字交互,您可以使用这些其他组件:

      • TTCPClient
      • TCP 服务器
      • TClientSocket
      • TServerSocket

      所有这些组件也随 Delphi 一起提供。

      不直接了解winpcap,但我相信它有一个delphi wrapper。我目前不知道我在哪里看到的,但使用 Google 代码搜索应该不难找到。

      【讨论】:

      • 是的,但是 indy 是否支持 windows 中的原始 tcp 套接字?
      • 也许问问自己:“我确定我必须使用原始套接字吗?”因为这似乎确实是一件要解决的大问题(请参阅其他答案)。如果您找到不需要原始套接字的解决方案,您可能会节省大量时间。
      【解决方案4】:

      您应该检查 ICS 组件

      ICS 是一个免费的互联网组件 所有 Delphi、C++Builder 的库, BDS 和 RAD Studio 版本 (win32)。 它包括 TCP、UDP、原始套接字、 客户端,服务器,以及许多高 级协议,例如 FTP、SMTP、 POP3、NNTP、HTTP 等。

      http://www.overbyte.be/

      【讨论】:

        【解决方案5】:

        我更喜欢synapse 而不是 Indy,它的架构更简单,因此更容易理解。

        【讨论】:

        • 那么,Indy 是否支持原始套接字?
        • 是的,确实如此,但它受操作系统对此类套接字的限制。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 2013-11-12
        • 2017-07-04
        • 2015-02-22
        • 2011-08-23
        • 2011-03-21
        相关资源
        最近更新 更多