我正在运行Delphi 10.2东京的示例网络共享应用
C:\用户\麦克\文件\ Embarcadero的\工作室\项目\圈养\ PhotoWall \移动
在Windows和iPad上正常运行时,应用程序可以正常运行但不起作用。
使用调试器(在Windows和iPad上)运行时,会收到如下错误消息:
调试器异常通知
Project MobilePhotoApp引发了异常类EIdSocketError,其中包含消息'套接字错误#48 地址已在使用中。'。
Project MobilePhotoApp引发了异常类EIdCouldNotBindSocket,其中包含消息'无法绑定套接字。地址和端口已在使用中。'。
答案 0 :(得分:0)
在评论的许多贡献者的帮助下,这似乎就是答案。
在搜索空闲端口时,可能会在网络库中处理异常。
我认为例外情况是解释了Windows 10上没有网络共享的问题。但是,当移动应用程序运行时,移动应用程序成功配对(运行在Windows 7计算机或Macintosh上的桌面伴侣) Android或iPad。缺乏配对的问题很可能与Windows 10计算机上的防火墙有关。
我已经问过如何在这个问题中让Windows 10或其防火墙授予对Delphi网络共享应用程序的访问权限:Delphi apps won't tether on Windows 10
答案 1 :(得分:-1)
在没有附加调试器的情况下运行应用程序时没有出现任何错误的原因是因为应用程序本身的设计是为了自己处理这些异常。
基于异常名称,我猜他们来自Indy网络库。 Indy是Delphi附带的第三方网络库。大多数Indy组件的设计方式是永远不会引发任何异常,因为它们是在内部处理的。
通常应检查组件文档以查看正确的错误处理方法。但这对你来说可能会有问题,因为Indy组件正在被Tethering组件内部使用,这使得一切都很复杂。
对于无法连接的示例应用程序,最可能的原因是,Indy组件会快速引发内部异常,并在被防火墙阻止时放弃连接尝试。事实上,这种情况经常发生得太快,以至于您的防火墙甚至不会询问您是否允许程序建立该网络连接。
这是我不喜欢使用Indy组件的原因之一,因为我的Eset Smart Security从来没有足够快地显示确认对话框以允许我建立网络连接。因此,在尝试使用Indy组件执行任何操作之前,我需要将此应用程序添加到防火墙例外。