德尔福。 socket 。仅在一个节点/MAC 地址上的 TIdHttp 套接字连接上访问被拒绝。必发API

标签 delphi sockets http ssl request

我怀疑这相当简单,因此没有任何代码会有帮助。

我正在开发一个 Delphi 非交互式“机器人”登录应用程序。

应用程序可以在除我当前开发系统之外的任何机器上使用任何帐户和证书/ key 对(使用相应帐户注册)登录。

即相同的可执行文件,具有相同的帐户登录凭据和 SSL 证书以及选择的 key 文件,在我尝试成功登录的每个系统上运行,但无法登录我的开发系统(Windows 8.1)并出现拒绝访问错误(10013 ).

自从我三天前让开发IDE崩溃以来,它就一直在这样做。我怀疑是:

  1. 在 API 服务器上有一个原始套接字级别的套接字锁定开放到我的开发系统上的 MAC 地址(处于 WAIT_STATE 状态)
  2. 由于欺诈预防安全触发并阻止了套接字/端口,崩溃导致我的非交互式登录帐户受到某种阻止或排除。

我怀疑 2,因为它是一个标准的非交互式机器人登录过程,而且它是一个开发人员 API,因此套接字连接失败很可能很常见。

我在每个开发日最多只进行几十次登录调用。

我是否已被锁定,或者它是 WAIT_STATE 中针对我的特定 MAC 地址的开放套接字......还是其他?

如果我无法关闭和释放 TIdHttp 连接,或者应用程序因 SSL 处理不当而崩溃(连同 IDE),服务器通常会为套接字连接保留 WAIT_STATE 多长时间 - 并且它会尝试为相同的 MAC 地址重新分配相同的套接字和端口。

我没有尝试过不同的端口号,也没有尝试过明确的套接字号。

我尝试过更改开发系统的 IP 地址并通过不同的提供商使用不同的 Wi-Fi 连接。如果它是原始套接字绑定(bind)问题 - 它不针对 IP 地址 - 我认为。

除了发生崩溃的开发系统之外,构建中的相同可执行文件适用于所有系统。

提前致谢。

最佳答案

10013为WSAEACCES,说明如下:

Windows Sockets Error Codes :

WSAEACCES
10013

Permission denied.

An attempt was made to access a socket in a way forbidden by its access permissions. An example is using a broadcast address for sendto without broadcast permission being set using setsockopt(SO_BROADCAST).

Another possible reason for the WSAEACCES error is that when the bind function is called (on Windows NT 4.0 with SP4 and later), another application, service, or kernel mode driver is bound to the same address with exclusive access. Such exclusive access is a new feature of Windows NT 4.0 with SP4 and later, and is implemented by using the SO_EXCLUSIVEADDRUSE option.

假设 WAIT_STATE,您实际上是指 TIME_WAIT,那么 Windows 在默认情况下仅将套接字保持在 TIME_WAIT 中 120 秒。不过,这不会导致 WSAEACCES 错误。尝试使用 TIME_WAIT 中的 IP/端口会导致 WSAEADDRINUSE 错误。

其他一些应用可能已经获取了您的应用想要使用的 IP/端口。如果您已经 3 天没有重新启动机器,该应用程序可能仍保留着 IP/端口。重新启动应该清除错误。

关于德尔福。 socket 。仅在一个节点/MAC 地址上的 TIdHttp 套接字连接上访问被拒绝。必发API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25143126/

相关文章:

windows - 与 GUI 应用程序相比,相同的代码作为 Windows 服务运行得更慢

multithreading - 数据库连接(可能需要很长时间)运行时显示启动屏幕

delphi - 操作系统版本返回Windows XP但预期使用Windows 8.1

c - 为什么我应该使用或不使用 MSG_CONFIRM?

ios - 在 iOS 中为推送通知发送报告

html - HTTPS iframe 显示为 HTTP(混合内容)

delphi - 如何将多个用户的Access数据库迁移到一个SQL Server数据库

c - read()/recv() 成功但缓冲区未更改且为空

http - 在端口 80 上运行联邦 RabbitMQ

asp.net - Azure http 负载平衡无法正常工作