我是一名C ++程序员,但我的问题是关于Delphi网络套接字库Indy。
基本上,由于Microsoft使用WinXP SP2削弱了原始套接字,因此无法通过它们发送TCP数据,这是否也适用于Indy?我的一个朋友推荐给我,而不是使用WinSock API。
如果没有,那么是使用WinPCap API使用原始TCP套接字的唯一方法吗?
答案 0 :(得分:3)
答案 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等。
答案 3 :(得分:1)
我宁愿选择synapse而不是Indy,它的架构更简单,因此更容易理解。
答案 4 :(得分:0)
Indy工作得很好。我使用它很少,几乎没有问题。
如果您正在寻找更基本的套接字交互,您可以使用这些其他组件:
所有这些组件也附带Delphi。
不直接了解winpcap,但我相信它有一个delphi包装器。我目前不知道我在哪里看过它,但使用谷歌代码搜索应该不难找到。