Indy是否支持Windows上的原始TCP套接字?

时间:2009-11-02 19:22:47

标签: delphi networking sockets indy

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

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

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

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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进行编程。

答案 2 :(得分:1)

你应该检查ICS组件

  

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

http://www.overbyte.be/

答案 3 :(得分:1)

我宁愿选择synapse而不是Indy,它的架构更简单,因此更容易理解。

答案 4 :(得分:0)

Indy工作得很好。我使用它很少,几乎没有问题。

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

  • TTCPClient
  • TCPSERVER
  • Tclientsocket构件实现
  • TServerSocket

所有这些组件也附带Delphi。

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