Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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
Java 亚马逊服务器ec2 Wes上的RMI绑定ip_Java_Web Services_Amazon Ec2_Amazon_Rmi - Fatal编程技术网

Java 亚马逊服务器ec2 Wes上的RMI绑定ip

Java 亚马逊服务器ec2 Wes上的RMI绑定ip,java,web-services,amazon-ec2,amazon,rmi,Java,Web Services,Amazon Ec2,Amazon,Rmi,我已经用服务器和客户端创建了一个RMI项目。我在ec2实例上运行服务器。我在了解如何在ec2上运行server属性以接受我的windows客户端时遇到了一些问题。我遵循以下步骤: 使用Filezilla传输文件 以管理员身份编译项目 我打开了我的IP地址的服务器端口 我遇到的问题是,我无法使用亚马逊提供的公共ip连接到我的服务器。所以我运行了ifconfig并使用了私有ip。 因此,在代码中,正如您将看到的,我使用了公共AmazonIP,但当我运行它时。我使用以下命令运行它 java SkyC

我已经用服务器和客户端创建了一个RMI项目。我在ec2实例上运行服务器。我在了解如何在ec2上运行server属性以接受我的windows客户端时遇到了一些问题。我遵循以下步骤:

  • 使用Filezilla传输文件
  • 以管理员身份编译项目
  • 我打开了我的IP地址的服务器端口
  • 我遇到的问题是,我无法使用亚马逊提供的公共ip连接到我的服务器。所以我运行了ifconfig并使用了私有ip。 因此,在代码中,正如您将看到的,我使用了公共AmazonIP,但当我运行它时。我使用以下命令运行它

    java  SkyCorpServer "172.31.31.94" 666  (private ip)(port)
    
    我不知道怎么做,但是通过这种方式,具有公共IP的客户端能够连接

    我已经阅读了关于RMI的绑定和注册表以及它的工作原理(创建注册表并将其转发到端口。连接到端口,然后找到注册表并使用服务器存根)

    现在的问题是,客户端在30秒后连接,当我尝试使用远程对象(look_op)时,客户端崩溃,并显示以下消息:

    java.rmi.ConnectException: Connection refused to host: 172.31.31.94; nested exception is: 
        java.net.ConnectException: Connection timed out: connect
    
    我使用了默认权限(全部接受),因为当我尝试这样做时,安全管理器不允许我创建注册表,所以我想这不是问题(权限)

    服务器代码:

     private static int port =666;
        private static String hostname = "35.167.2xx.xx";
    
        public static void main(String[] args) throws RemoteException {
            String bindLocation = "//" + hostname + ":" + port + "/Hello";
    
            System.setProperty("java.rmi.server.hostname",hostname); 
            if (System.getSecurityManager() == null) {
                System.setSecurityManager(new SecurityManager());
            }
            try { // special exception handler for registry creation
                LocateRegistry.createRegistry(port);
                System.out.println("java RMI registry created.");
            } catch (RemoteException e) {
                // do nothing, error means registry already exists
                System.out.println("java RMI registry already exists.");
            }
    
            SkyCorpServer server = new SkyCorpServer();
    
            try {
                Naming.bind(bindLocation, server);
    
                System.out.println("Addition Server is ready at:" + bindLocation);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                System.out.println("Addition Serverfailed: " + e);
            }
    
    服务器输出(无错误运行)(我使用的命令向上滚动):

    如您所见,服务器在172.31.31.94侦听端口:666

    客户端代码:

    private final static    String remoteHostName = "35.167.2xx.xx";
    private final static   int remotePort = 666;
    
    public SkyCorpClient() throws NotBoundException, MalformedURLException, RemoteException {
    
        String connectLocation = "//" + remoteHostName + ":" + remotePort + "/Hello";
    
        look_op = (ChatInterface) Naming.lookup(connectLocation);
        System.out.println("Connecting to client at : " + connectLocation);
    }
    
    客户端输出(连接时)

    尝试使用远程对象查找时:

    java.rmi.ConnectException: Connection refused to host: 172.31.31.94; nested exception is: 
    java.net.ConnectException: Connection timed out: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
    at com.sun.proxy.$Proxy0.registerUser(Unknown Source)
    at SkyCorpClient.actionPerformed(SkyCorpClient.java:206)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6533)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    

    我猜它连接到公共ip 35.xxx,因为服务器已经创建了注册到
    172.*
    的注册表,所以我无法使用该对象。有什么我遗漏的吗?

    首先-您的端口真的从外部打开了吗?如果只有端口22打开,请检查network interface security(网络接口安全)组,并使用nmap(或其他类似工具)查看端口是否确实可以从外部使用。另外,你是正确的,你应该绑定到所有的ip地址(0.0.0.0),我已经接受所有(入站)流量到myanyware的所有端口。客户机还可以管理连接。我可以ping服务器。我试图使用nmap,但他们绑定了服务器,因为他们有脚本禁止您进行渗透测试,但rmi在端口666上运行。netstat-l如果查找成功,端口转发将正常工作
    java.rmi.server.hostname应已修复该问题。是否确定已设置,并在导出任何远程对象之前设置?您可以在客户端打印存根并查看它包含的IP地址吗?注意,您应该将
    createRegistry()
    的结果存储到一个静态变量中,并且您应该将远程对象导出到与注册表相同的端口上,或者导出在防火墙中打开的另一个固定端口号(如果您喜欢浪费端口)@EJP我相信连接是延迟初始化的。在远程接口上调用方法之前,查找可能会成功,但不会建立真正的连接。因此,“客户端管理连接”可能不是真的
    Connecting to client at : //35.167.203.111:666/Hello
    Connected at : 35.167.203.111
    
    java.rmi.ConnectException: Connection refused to host: 172.31.31.94; nested exception is: 
    java.net.ConnectException: Connection timed out: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
    at com.sun.proxy.$Proxy0.registerUser(Unknown Source)
    at SkyCorpClient.actionPerformed(SkyCorpClient.java:206)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6533)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)