在iPhone上启动端口为80的Web服务器

9
我已经在一个项目上工作了一段时间,它有一个内置的HTTP服务器,运行在端口8080上。用户被告知通过例如http://192.168.1.4:8080/访问设备--非常好用。最近我意识到应用程序可以使用端口80来消除":8080"的需要,但是如果我尝试将端口设置为80,就会崩溃并显示"General CFSocket error"。

有什么想法可以在应用程序中启用Web服务器的80端口吗?

这里有几个屏幕截图:

第一张——在iPad上,该应用程序显示了您可以访问它的URL。

iPad
(来源: enrogue.com)

第二张——通过IP地址在Firefox上:

IP的FF
(来源: enrogue.com)

以上内容来自应用商店上的真实应用程序,不是越狱魔法或其他什么。我知道在UNIX系统上,端口<1024保留给管理员使用,因此上述应用程序显然正在执行某些特定操作以获取对端口的访问权限。


1
有没有可能其他应用程序正在使用该端口,或者您以前使用您的应用程序打开了该端口,但忘记了正确清理?尝试关闭并重新启动手机,然后再尝试一次吗? - Steve
我打开我的应用程序,崩溃了,打开其他应用程序,正常运行,再次打开我的应用程序,又崩溃了。不,这不是清理问题。 - Kalle
哦,这不是iOS 4,因此没有其他应用程序在运行。而且我认为,在iOS 4中保持网络套接字在后台运行会导致立即终止,因此即使那时也不应该是这种情况。 - Kalle
2个回答

5

您可以绑定设备的IPv4接口上的端口80,但不能在IPv6接口上绑定,模拟器也不行。您需要修改套接字代码,只监听IPv4接口,对于模拟器,您可以有条件地使用不同的端口:

#if TARGET_IPHONE_SIMULATOR
    [httpServer setPort:8080];
#else
    [httpServer setPort:80];
#endif

我没有在模拟器上运行,所以那不是问题——我猜套接字代码是罪魁祸首。我会再次尝试并评论! - Kalle
这当然留下了一个问题:那些想要IPv6的用户怎么办?我猜你可以在某个配置值中加入一些东西,如果端口>1024,则启用IPv6,但最好苹果应该让你使用80端口。 - Kalle
用户需要在IPv6-only网络上才会连接失败,我认为你在那种环境下不会发现太多这样的情况。最好向苹果提交一个报告,以便行为得到一致。 - Matt Stevens

4

iPhone是基于Unix的。1024以下的端口被保留给root/superuser使用。您需要成为root用户才能使用这些端口。


是的。换句话说,除非在越狱手机上以root身份运行,否则无法打开低于1024的端口。 - Jakob Borg
我认为情况应该是这样的,但很明显不是这样,因为应用程序正在访问80端口。看看Air Sharing吧,虽然有点贵,但它可以做到。至少是iPad的高清版本。 - Kalle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接