delphi - 如何在 Delphi 中提高 TCP 数据包的优先级?

标签 delphi winapi tcp

我有一个服务器应用程序,它从客户端接收一些特殊的 TCP 数据包,需要通过向客户端发送高级 ACK 来尽快对其使用react(TCP ACK 不符合我的需求)。

然而,这个服务器确实是网络密集型的,有时数据包发送的时间太长(比如在本地网络中需要 200 毫秒,而一个简单的服务器应用程序可以在不到 1 毫秒的时间内发送它)。

有没有办法在 Delphi 中用高优先级标签或类似的东西来标记这个数据包?或者可能使用 Win32 API?

提前致谢。

编辑

感谢您到目前为止的所有回答。我会添加一些细节。我的产品具有以下设置:有几种设备基于具有 WIFI 连接的车辆。当他们到达车库时,这些设备连接到我的服务器并开始传输数据。

由于硬件限制,我实现了一个高级 ACK 来让设备知道最后一个数据包成功到达(请不要争论这个 - 即使我得到一个正确的 TCP ACK 数据也可能被破坏) .但是,如果我使用与远程数据库通信的服务器软件来发出此 ACK,则会出现很长的延迟(>200 毫秒)。如果我使用专用软件来完成这项任务,我会得到很小的延迟 (<1ms)。所以,我在想,如果我可以告诉 Windows 先发送那些特殊的数据包,因为在我看来,这个数据包正在延迟,所以数据库的数据包可以被传送。

这就是我提出问题的动机。

编辑 2

根据要求:这是旧版软件,我使用的是旧版 dclsockets140.bpl 包和 Delphi 2010 (14.0.3593.25826)

最佳答案

IMO 很难实现这一点。涉及到很多设备和软件。首先,如果您在 2 个不同的操作系统之间进行通信,您会遇到延迟。第二,软硬防火墙、杀毒软件,一切都在过滤/延迟你的包裹。

你也可以尝试“破解”系统(这涉及到一些关于帧/段如何打包/发送、流量控制、拥塞等的非常好的知识),或者通过从代码中改变它,或者通过使用一些http://half-open.com/ 等工具或其他人。

关于delphi - 如何在 Delphi 中提高 TCP 数据包的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9829431/

相关文章:

java - 自定义 XML 消息上带有 Java Socket 服务器的 WCF TCP 客户端

delphi - 将 protected 部分中的方法访问限制为少数类

Delphi 返回字符串的最后 3 个字符

javascript 调用 DataSnap REST 使浏览器无响应

php - 实时位置跟踪 - 基于 Windows 程序还是浏览器?

c - 如何将对话框位置坐标复制到另一个对话框中?

http - 为什么我无法在对称 channel 上获得相同的上传和下载速度?

c++ - 如何为完成端口创建多个线程?

c++ - 如何判断我的进程是否是从 Windows 自动运行键启动的?

c - 如何在混杂模式下创建一个 tcp 套接字?