Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Delphi中的Indy HTTP服务器在iOS应用程序中接收连接?_Ios_Delphi_Indy10_Httpserver_Delphi Xe4 - Fatal编程技术网

如何让Delphi中的Indy HTTP服务器在iOS应用程序中接收连接?

如何让Delphi中的Indy HTTP服务器在iOS应用程序中接收连接?,ios,delphi,indy10,httpserver,delphi-xe4,Ios,Delphi,Indy10,Httpserver,Delphi Xe4,我正在编写一个多平台应用程序,它是一种“代理”,设计用于处理HTTP请求,将其中一些请求传递给远程服务器,并直接响应其他请求。因此,它同时充当HTTP客户端和HTTP服务器 我一直在Delphi和Lazarus中使用Indy 10组件,它们在桌面平台上运行良好。我已经使用Lazarus成功地将该项目移植到Windows、Linux和MacOS。现在,我正尝试使用Delphi XE4对iOS执行同样的操作。我目前在运行OSX 10.8.2的Mac上的iOS模拟器中运行该项目;稍后,我将瞄准iPad

我正在编写一个多平台应用程序,它是一种“代理”,设计用于处理HTTP请求,将其中一些请求传递给远程服务器,并直接响应其他请求。因此,它同时充当HTTP客户端和HTTP服务器

我一直在Delphi和Lazarus中使用Indy 10组件,它们在桌面平台上运行良好。我已经使用Lazarus成功地将该项目移植到Windows、Linux和MacOS。现在,我正尝试使用Delphi XE4对iOS执行同样的操作。我目前在运行OSX 10.8.2的Mac上的iOS模拟器中运行该项目;稍后,我将瞄准iPad设备

但是我发现我无法让TIdHTTPServer组件在iOS上创建到传入请求的连接。我将服务器绑定到IP地址和端口并激活它;这将启动侦听器线程。但是,当我尝试向服务器发送GET请求时,它会引发异常EIdIPVersionUnsupported,并显示消息“请求的IPVersion/Address系列不受支持”。无论我尝试从应用程序本身内部或从另一台计算机上运行的浏览器外部路由GET请求,都会发生此错误


我通常将HTTP服务器绑定到本地主机IP地址,因为代理是作为后台进程运行的,用于处理来自前台运行的浏览器的请求。对于外部浏览器测试,我将其绑定到Mac自己的IP地址。

大多数Indy组件,包括
TIdHTTPServer
,在iOS中的工作方式与在其他平台上的工作方式完全相同。为了支持iOS,Indy唯一改变的是实现低级套接字API函数调用(通过
TIdStackVCLPosix
类),并更新Indy的内部编码以支持新的Embarcadero移动编译器(ARC等)

TIdHTTPServer
应该可以在iOS上工作,只要它有打开TCP/IP侦听套接字的权限。
EIdIPVersionUnsupported
异常意味着尝试使用
TIdStackVCLPosix
不支持该特定API调用的IP版本调用低级套接字API。所有的
TIdStackVCLPosix
方法都支持IPv4和IPv6。因此,在没有看到导致异常的实际堆栈跟踪的情况下,我只能猜测Posix的
accept()
函数可能报告连接的客户端使用的是IPv4或IPv6以外的套接字地址类型

话虽如此,我只是修复了
TIdStackVCLPosix.Accept()
中的一个小错误,在调用POSIX的
Accept()
函数之前,它没有初始化地址存储的大小,因此这可能是一个因素,也可能不是一个因素。抓取最新的Indy 10 SVN版本(该版本中有其他未加入XE4版本的错误修复),然后重试