2016-04-15 126 views
0

我正在使用HTTPURLConnection并想知道如何处理端口问题?我的意思是这个类使用底层的套接字,但是客户端套接字的端口号是如何在内部分配的?有任何想法吗 ?HTTPURLConnection端口号分配

Thx

回答

1

它不是。它完全取决于操作系统。

+0

但是,如果您不通过URL传递端口号,则无法分配它。如果可能的话,您可以请您详细说明您的陈述,例如在Unix中? – zgulser

+0

无论如何您都无法指定它。 URL中的端口号是*目标*端口。您询问的端口号是* local *端口。你无法控制它。你不需要控制它。这里没有问题需要解决。 – EJP

+0

我明白你的观点。我不需要知道,是的。但我只是想知道引擎盖下的东西。不管怎么说,还是要谢谢你。 – zgulser

1

创建套接字时,必须考虑是否要打开服务器套接字或客户端套接字。

服务器套接字是opend,并在那里等待传入请求来启动“对话”。所以它需要一个客户端已知的端口号。出于这个原因,有几个服务具有“知名端口”,例如HTTP是端口80等。

客户端套接字是在创建服务器套接字时开始的。在这种情况下,服务器不需要提前知道客户端的端口号 - 它会在第一个传入请求时收到它。因此,当打开一个客户端套接字时,操作系统将从未使用的端口列表中选择一个随机端口(查找“临时端口”),并在通话完成后经常关闭它。

这种情况类似于ip-adresses:客户端需要知道服务器的ip-address来联系它,但服务器不需要知道每个客户端的ip地址。

+0

当然。它不必知道。感谢exp。虽然。一个额外的提示说明是 - 它应该从代码中释放,以让底层操作系统关闭它。当谈话刚刚结束时,句柄不会关闭(如果你不是故意说“结束谈话”)。 – zgulser

+0

@zgulser关闭输入流或调用'disconnect()'应该关闭套接字。 – EJP

+0

@EJP当然。 – zgulser