Chinaunix

标题: JAVA调试通不过之新问题----难道真的一次编程,到处调试??? [打印本页]

作者: jxh_ty    时间: 2005-12-09 21:36
标题: JAVA调试通不过之新问题----难道真的一次编程,到处调试???
程序的客户端在:
JAVA调试通不过
这个程序服务器在Windows下,客户端在其它系统下没有问题,运行正常。
但如果服务端放在Linux(RHAS4)下,各种环境均没问题,客户端为Windows,总是会出现以下这个问题,不能正常运行:

[ 本帖最后由 jxh_ty 于 2005-12-9 21:52 编辑 ]

1.JPG (14.21 KB, 下载次数: 33)

问题:

问题:

作者: sakulagi    时间: 2005-12-09 22:21
你的Linux的防护墙允许你的通信么?
作者: 雨夜的寂寞    时间: 2005-12-10 05:10
你启动服务了么.
作者: jxh_ty    时间: 2005-12-10 12:32
在linux(没有防火墙)的class文件目录下运行了rmiregistry &然后运行了java CalculatorServer,会出现上面的错误提示,如果在Linux下,没有运行上面的两个或是一个就是出现下面的错误:

1.JPG (14.12 KB, 下载次数: 34)

问题:

问题:

作者: jxh_ty    时间: 2005-12-11 15:23
自己搞定!
问题原来出在这里:在服务端的  Naming.rebind("rmi://localhost:1099/CalculatorService", c);这个语句在Windows下没问题,但在其它系统,包括Linux(Unix)等下面是不行的,因为系统把localhost解析为127.0.0.1,当客户端向服务器Lookup时,服务端就会把解析出来的地址发给客户端,让客户端再根据这个地址去连接,客户端收到127.0.0.1这个地址去连接,实际连接的是自己本身,当然也就不行了。
    更正办法:
    把Naming.rebind("rmi://localhost:1099/CalculatorService", c);改成Naming.rebind("rmi://192.168.1.10:1099/CalculatorService", c);,直接用IP地址(192.168.1.10为服务器本身IP),这样就没问题了;或者是用机器名,该服务器的名字为RHELTEST,把它加到服务器的hosts文件中,并放在127.0.0.1之前,以让该服务能正确解析出来机器名所对应的IP;要么用域名解析也行,这种方法比较适合大规模场合。
   
    疑问Naming.rebind("rmi://localhost:1099/CalculatorService", c);,在Windows下能正常工作,真的是想不通,看样子Windows下和Linux下的JAVA的工作方式也是有所区别的!

[ 本帖最后由 jxh_ty 于 2005-12-11 15:30 编辑 ]
作者: sakulagi    时间: 2005-12-11 22:15
确实很奇怪。window也是把localhost解析成127.0.0.1的啊。为甚么就能工作呢。按理说不能工作是比较正常的。
作者: wobushiwo    时间: 2005-12-11 23:07
啊,怎么是这样解释的?

bind时,填写127.0.0.1或localhost都可以

客户端lookup时,直接就解析了,所以那个地址要填写服务器的域名/IP等,不是跟bind时一样的localhost或127.0.0.1
作者: jxh_ty    时间: 2005-12-12 18:57
你老兄可能都在Windows下用JAVA,没遇到过这个问题,但在Linux下就是不行,你必须是Naming.rebind("rmi://192.168.1.10:1099/CalculatorService", c);才行,如果在Windows下,服务端则用Naming.rebind("rmi://localhost:1099/CalculatorService", c);和Naming.rebind("rmi://192.168.1.10:1099/CalculatorService", c);两者都可以的,我已经试过很多次了。而且这个问题在网有很多人提出了,但都没有人回答,所以我在这时也算是给大家一个答复。
   至于在Windows对localhost,它的解析也是127.0.0.1这个IP,只是可以JAVA在Windows下工作可能多把它转化了一下,转化成真的IP了,所以Windows下的工作就没问题。在这里也给各位朋友说上一句:一定要在软件将要运行的环境中开发,否则后果自负!!!!!

[ 本帖最后由 jxh_ty 于 2005-12-12 18:58 编辑 ]
作者: wobushiwo    时间: 2005-12-12 19:09
linux 对 localhost 解析 不是 127.0.0.1 吗?
作者: wobushiwo    时间: 2005-12-12 19:14
现在假设两台机 A:192.168.0.1   B:192.168.0.2

将A做服务器,在 bind 时,localhost/domain name/ip都行,前提是localhost或domain name要能解析成

127.0.0.1 或 192.168.0.1



客户端的lookup时,填写的不能是localhost,要ip 192.168.0.1 或 domain name

LZ是不是按我上面说的做,但是失败了?

[ 本帖最后由 wobushiwo 于 2005-12-12 19:16 编辑 ]
作者: jxh_ty    时间: 2005-12-13 14:00
标题: 在internet网络应用RMI直接调用难以成功。
普通的RMI应用需要rmiregistry支持,它使用1099端口,而JAVA服务应用程序会随机使用一个端口,这样就给防火墙应用带来极大麻烦,不可能每运行一次去改变防火墙设置吧?所以这种直接的RMI调用在internet网络是很难大量应用的。
作者: JavaWang    时间: 2005-12-14 21:44
总而言之,是操作系统的问题,与java无关,java不负责解析域名,它把这个任务交给操作系统,操作系统返回什么java就用什么.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2