重写一遍

我的问题是,在两台均在外网的计算机中,我的客户端程序是不是只要把
ip号改成服务器外网的ip即可?反正我做了n遍尝试,均告失败;难道j2ee就
仅限于局域网吗?(还是要设置别的东东?)另外,如果局域网中的机器通过代理服务器来来调用另一处于外网的服务器,又
该如何实现?rmi究竟是什么?望各位指教

解决方案 »

  1.   

    和lyy9505()有同感,望各位大虾帮忙。
      

  2.   

    j2ee当然不是只能适用于局域网了!可能是你的配置某个地方与局域网关联,因而改成外网ip就出问题了!
    关于RMI:全称remote method invocation 它是java语言中的各对象之间借助互联网来进行数据交换的一种数据结构,采用java rmi可以使不同机器上运行的各java对象之间能像在同一机器上运行一样进行通信。
      

  3.   

    关键是网间路由是否允许J2EE对应端口的请求和回应信息通过。
    也许在矿局域网的时候应该换WebServices
      

  4.   

    我把具体的错误帖出来把:
    我的外网ip是:219.145.4.42
    内网ip是:192.168.0.74但在另一外网机器上测试是出现如下错误:
    E:\JCreator Pro\MyProjects\lyy\Login>java LoginClient
    javax.naming.CommunicationException [Root exception is java.rmi.ConnectException
    : Connection refused to host: 192.168.0.74; nested exception is:
            java.net.ConnectException: Connection timed out: connect]
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:647)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:507)
            at javax.naming.InitialContext.lookup(Unknown Source)
            at LoginClient.pressOK(LoginClient.java:107)
            at LoginClient.actionPerformed(LoginClient.java:74)
            at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
            at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknow
    n Source)
            at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
            at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
    ce)
            at java.awt.Component.processMouseEvent(Unknown Source)
            at java.awt.Component.processEvent(Unknown Source)
            at java.awt.Container.processEvent(Unknown Source)
            at java.awt.Component.dispatchEventImpl(Unknown Source)
            at java.awt.Container.dispatchEventImpl(Unknown Source)
            at java.awt.Component.dispatchEvent(Unknown Source)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
            at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
            at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
            at java.awt.Container.dispatchEventImpl(Unknown Source)
            at java.awt.Window.dispatchEventImpl(Unknown Source)
            at java.awt.Component.dispatchEvent(Unknown Source)
            at java.awt.EventQueue.dispatchEvent(Unknown Source)
            at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
            at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
            at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
            at java.awt.EventDispatchThread.run(Unknown Source)
    Caused by: java.rmi.ConnectException: Connection refused to host: 192.168.0.74;
    nested exception is:
            java.net.ConnectException: Connection timed out: connect
            at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
            at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
            at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
            at sun.rmi.server.UnicastRef.invoke(Unknown Source)
            at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:528)
            ... 27 more
    Caused by: java.net.ConnectException: Connection timed out: connect
            at java.net.PlainSocketImpl.socketConnect(Native Method)
            at java.net.PlainSocketImpl.doConnect(Unknown Source)
            at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
            at java.net.PlainSocketImpl.connect(Unknown Source)
            at java.net.Socket.connect(Unknown Source)
            at java.net.Socket.connect(Unknown Source)
            at java.net.Socket.<init>(Unknown Source)
            at java.net.Socket.<init>(Unknown Source)
            at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S
    ource)
            at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S
    ource)
            ... 33 more注意错误的第一行:
    这里明明在外网上的连接,却告诉我我的内网ip(192.168.0.74)拒绝了连接
    真实莫名其妙!!!顶啊
      

  5.   

    一个小问题:你的程序中没有端口号,难道rmi回自己去找端口吗?其次是没有传输协议?到底jboss的开发文档中要求如何?
      

  6.   

    用WebService吧,HTTP应该是可以畅通无阻的。
      

  7.   

    可以穿越防火墙来访问EJBs的J2EE应用程序?
    1、通常写一个servlet来截取HTTP请求,并将它们导向到EJBs(不正规)。
    2、运用信道(tunneling)技术,如HTTP上的RMI(性能带来影响)。
    3、运用JSSE。
    Remote Method Invocation(RMI)是在Java Remote Methods Protocol(JRMP)、Internet Inter Orb Protocol(IIOP)、或一个如T3的私有协议上实现的。要穿越防火墙实现RMI而又不在防火墙中另外打洞,就需要我们采用一些方法。
    我想楼主应用的是2中的技术吧,但不知相应私有协议是什么?还是先测试一下你的私有协议是基于http的吗?
      

  8.   

    在你的客户端程序的机器上的hosts文件中
    添加远程的机器名--ip
      

  9.   

    to  lotus_zyb:
    谢谢你的提醒;
    但是我找到的资料说是在服务器端改写host文件;
    设置网络映射,我不知道能否成功。不管怎样,先谢谢大家了。再顶一次
      

  10.   

    关于外网rmi调用的问题终于得到解决!!!!
      郁闷啊,半个月过去了。  解决方法如下:
      一。在winxp pro下:找到
      C:\WINDOWS\system32\drivers\etc\host文件
      编辑如下:
      127.0.0.1       localhost//默认下存在的东东
      219.145.91.103(我上网时的外网ip)     lyy(主机名)    #mycode
      二。编辑E:\jboss-3.2.3\bin\run.bat文件
      在set JAVA_OPTS=%JAVA_OPTS% -Dprogram.name=%PROGNAME%
      处改成:
      set JAVA_OPTS=%JAVA_OPTS% -Dprogram.name=%PROGNAME%;%JAVA_OPTS% -Djava.rmi.server.hostname=219.145.91.103  重新启动jboss3。23  这样就搞定了。
      再次感谢各位的帮助
    谢谢