我可以使用" new ServerSocket(0)"与openshift

时间:2015-02-17 18:01:14

标签: openshift serversocket

我开发了一个应用程序,允许多个玩家在各种游戏,如shifumi,扑克,国际象棋等在线一起玩。它在我的localhost上运行得很好。我想发表它。所以我决定用openshift来做这件事。

但是有一个问题。

它似乎来自这个声明:new ServerSocket(0)。我在HttpServlet的doPost方法中执行此操作。

你能否告诉我,我没有权限在openshift服务器内执行此操作(新的ServerSocket(0))?

1 个答案:

答案 0 :(得分:0)

我认为你在这里遇到了几个问题。

首先,当你调用new ServerSocket(0)时,它会尝试找到一个可以绑定的套接字,可能是0.0.0.0(所有IP地址/接口)或127.0.0.1,都不是其中允许使用OpenShift。

根据文档(位于此处:http://download.java.net/jdk7/archive/b123/docs/api/java/net/ServerSocket.html),您可以使用其中一个重载方法来提供绑定的IP地址,这应该是您的OPENSHIFT__IP(可能是jbosseap,jbossas,wildfly,jbossews)等等。)

ServerSocket(int port, int backlog, InetAddress bindAddr)

你的第二个问题有点复杂,基本上你可以绑定哪些端口。 OpenShift允许用户代码绑定到端口15000-20000,具体取决于其他应用程序或服务未使用的端口。但是,这些端口都没有对公共互联网开放,它们都是内部通信的内部端口,因此如果您尝试让客户端连接到它们,它将无法工作。唯一可公开的端口是80/443/8000/8443,您的应用程序必须绑定到OPENSHIFT__IP上的端口8080,才能使用您的app-domain.rhcloud.com公共URL访问。您可以查看此文章,详细了解所有绑定和路由的工作原理:https://developers.openshift.com/en/managing-port-binding-routing.html

希望能回答关于为什么那段代码无效的问题。