作者freshJC (JC)
看板java
标题Re: [J2SE] RMI之Client端private ip问题
时间Sun May 25 11:29:29 2008
※ 引述《reon (完成这条天堂路)》之铭言:
: ※ 引述《freshJC (JC)》之铭言:
: : 各位不好意思,我目前正在修改某一个RMI的电子白板程式,
: : 目前的状况为:Server端程式在固定ip下开启,而Client端使用的是浮动ip。
: : 当Client开启白板程式时,如要将Server端中画图的资讯传至Client时,
: : Server端程式会因Client的远端物件为虚拟ip,而出现Exception:
: @@?
: 你把RMI Server设在Client端? 你Server都有实体ip了
: 为何要把RMI设在Client端?
: 一般来说RMI Server 必须要实体ip的吧 放在Client端很奇怪吧
: 所以你应该要把RMI架在Server端 来启动RMI程式吧
: 因为架在Server端 即使你Client这边是虚拟ip也是ok没问题
: 不知道我讲的 跟你所问的一不一样@@
不好意思,我似乎没有讲的很清楚。
先回你的疑惑:
1. RMI Server程式确实是在实体ip下开启,并且Naming.rebind一个rmi URL进去。
Client端便用Naming.lookup去得到Server端的references。
2. 这个白板程式不只是让Client端去使用Server端的函式,
Server端要将画图的资讯broadcast给每个Client端时,
也需要使用到Client端的函式来把Client端的白板画图上去。
目前的问题就是去使用Client端物件函式时,因为虚拟ip的关系而Connect refuse。
下面连结是我在JavaWorld所发的文,里面有部份程式码,
希望能够帮助你理解问题所在。
http://www.javaworld.com.tw/jute/post/view?bid=5&id=229163&sty=1&tpg=1&age=0
: : java.rmi.ConnectException: Connection refused to host:
: : 192.168.1.16; nested exception is:
: : java.net.ConnectException: Connection timed out: connect
: : 这个问题已经困扰很久了。
: : 我也有去看UnicastRemoteObject的API,发现里面并没有直接对ip作修改的函式。
: : 不知有什麽办法,可以让Client端程式拥有真实ip的资讯,
: : 以让Server端程式能够顺利broadcast出去。
: : 希望有熟RMI技术的大大能够帮忙一下,不然最近都快被这个问题搞疯了......囧
: : 万分感谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.73.12.172
1F:推 smayday:或许你可以试看看 stun穿越NAT 将Client的private ip 转成 05/25 11:49
2F:→ smayday:public ip 这样应该就没有连线问题了(?) 05/25 11:51
3F:推 reon:你有设过.policy了吗@@? XP的话是在 使用者资料夹下 05/25 15:54
5F:推 reon:另外就是你把127.0.0.1 换成改成外面看到这台的实体ip看看 05/25 16:12