android端口号选择上的持久TCP连接?

Posted

技术标签:

【中文标题】android端口号选择上的持久TCP连接?【英文标题】:Persistent TCP connection on android port number choice? 【发布时间】:2011-08-25 05:56:39 【问题描述】:

如果你要在 android 上实现一个持久的 tcp 连接,你会选择什么端口号?

这是 Google 的 C2DM 服务使用的那种连接。

【问题讨论】:

您想知道应该为服务器上的守护进程使用哪个端口?我理解正确吗? 是的,对于服务器,因为客户端启动了连接。 这很有趣,而且更清楚一点:labs.ericsson.com/apis/network-probe 【参考方案1】:

真正使用任何端口。只要它高于 1024,它可能并不重要。假设您选择端口 5000。

我建议使用第二个 IP 地址并将 ip2:80 上的所有流量转发到 ip1:5000。这样您就可以绕过网络上的任何防火墙限制。

如果您想了解有关添加第二个 IP 地址和向您的 iptables 添加 NAT 以将流量从 ip2 上的端口 80 转发到 ip1 上的端口 5000 的更多详细信息,我可以与您分享我的笔记。

【讨论】:

所以您是在建议客户端应用程序连接到端口 80? 是的,只要您有两个 IP 地址,这没问题。在我的手机网络上,只有端口 80 和 443 是开放的——这就是我解决这个问题的方法。 在运营商决定终止连接之前,连接会保持多长时间?我的意思是我应该多久发送一次保持活力? 不确定。我认为这可能因运营商而异,具体取决于他们使用的网络设备。你想进行长轮询和/或服务器推送吗?如果是这样,我建议在服务器端使用 Node.js,在客户端使用 Socket.IO。 我想保持一个 tcp 套接字始终连接并进行服务器推送。关于 Socket.IO 的有趣指针。我认为这只是javascript,不是吗?我的应用程序是 android 本机 Java。谢谢!【参考方案2】:

1764 怎么样? (42*42)。或者可能是 3141?

【讨论】:

这取决于你是要舍入还是截断;)【参考方案3】:

从技术上讲,您选择哪个端口并不重要。如果您还想运行此服务,则不能使用另一个服务所需的端口。所以如果你想在邮件服务器上运行它,端口 25 是一个不好的选择。

但由于有时存在可能过滤流量的防火墙,我建议您使用端口 443 (https),​​这样您的流量通过的机会会稍高一些。

【讨论】:

我很确定你无法绑定到低端口 我想保持此连接处于活动状态,而不需要在其上发送任何流量。我不确定您是否知道运营商会在一段时间后删除他们认为过时的连接。我想知道他们是否会更积极地处理使用端口 443 的连接... @Julian:在 linux 系统上,您通常需要特殊权限才能绑定到低端口 ( 1024的端口。例如,见:code.google.com/p/android/issues/detail?id=4039(老问题..但我相信还是这样) @Erdal Carriers 会做各种奇怪的事情。不会有一个解决所有问题的方案。 @JesusFreke 他要求服务器上的端口,而你通常不会在服务器上运行 Android。

以上是关于android端口号选择上的持久TCP连接?的主要内容,如果未能解决你的问题,请参考以下文章

POSTGRESQL的连接的端口号是多少

如何隐藏开启的TCP端口号

TCP端口号范围及分类

tcp协议通过啥来区分不同的连接

计算机网络HTTP:HTTP 和 FTP

网络通信与信息安全之深入解析TCP连接中如何确定客户端的端口号