3

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

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

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

4

5 回答 5

3

如果没有,我知道Delphi的突触可以。最新版本现在支持 D2009,并且正在积极支持中。

于 2009-11-02T21:36:19.590 回答
2

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

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

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

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

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

于 2009-11-03T05:23:47.473 回答
1

你应该检查ICS组件

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

http://www.overbyte.be/

于 2009-11-03T01:40:17.503 回答
1

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

于 2009-11-03T02:34:41.323 回答
0

印地工作得很好。我经常使用它,几乎没有问题。

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

  • TTCP客户端
  • TCP服务器
  • TClientSocket
  • TServerSocket

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

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

于 2009-11-02T19:43:56.883 回答