PDA

View Full Version : rmi



sarajh
یک شنبه 21 مهر 1387, 11:42 صبح
يه برنامه rmi ىارم تو شبكه محلي كار مي كنه ولي Diallup وقتي connect ميشم كار نمي كنه ، اگه کسی میتونه یه راهنمایی کنه rmi تو شبكه محلي يا diallup فرق داره؟

manvaputra
دوشنبه 22 مهر 1387, 08:31 صبح
سلام دوست عزیز سوال شما نیاز به بررسی ساختار برنامتون هم داره. مثلا اینdial up توی اینترنته یا PEER TO PEER اگه توی اینترنته کجا سرور رو رجیستر کردینو از این قبیل.....

javaphantom
دوشنبه 22 مهر 1387, 08:44 صبح
يه برنامه rmi ىارم تو شبكه محلي كار مي كنه ولي Diallup وقتي connect ميشم كار نمي كنه ، اگه کسی میتونه یه راهنمایی کنه rmi تو شبكه محلي يا diallup فرق داره؟

منظورتون java remote method invocation هست؟ منظورتون رو بیشتر توضیح بدین.
در قسمت client باید rmic کنید

mazdadoost
دوشنبه 22 مهر 1387, 11:00 صبح
دوست عزیز :
با توجه به اینکه سواله شما نکاته مبهم زیادی نداره و حد اقل مشکل رو از نظر خطا(مخصوصا Stack Trace ) ذکر نکردین چند مسئله محتمله :
1-اگر به سروری که اشیاو RMI تون رو روش BIND کردین با اینترنت تحته VPN-PTPT و یا NAT و RAS متصل میشید باید بدونید RMI به دلیل عدم پشتیبانی از مسیر یابی اصولا در این نوع معماری های ارتباطی کاربردی نداره.اما را حلی هست و استفاده از تکنیک RMI Relay یا RMI Proxy هست.
2-حتی اگر RMI روی اینترنت با RAS بتونه کار کنه اکثر سرور ها و ای اس پی ها فقط به چند پورت معدود مثل 80 برای HTTP امکان ارتباط میدن و در نتیجه چنانچه سرور شما پورت های HTTP و یا FTP قبلا برای وب و FTP رزرو باشند شانس کمی خواهید داشت که بتونید سرور RMI رو به پورتی به جز این پورت ها BIND کنید.یه راه حل میتونه اینباشه که برنامه پورت های سیستمرو اسکن کنه و تکیه برشانس یه پورت باز پیدا کنه این کاریه که Flash media server برای پرتکل rtmp انجام میده .البته باز هم استفاده از یه RMI Relay توصیه میشه.
و اما RMI Relay:شما میدونید که پرتکل HTTP و پورت 80 یکی از متداولترین پرتکل های موجود در اینترنته چون قابل مسیر یابی و مهمتر از اون با Firewall ها مشکلی نداره!(این ها باعث شده Web service ها بر بستر همین پرتکل به این سطح از محبوبیت در مقوله پردازش توزیع شده در مقابل فناوری های دیگه مثل RMI-Corba-و RPC برسند!)خوب میتونید در سطح کلینت و سرور RMI یه مبدل از نوع HTTP بزارید (در حد سوکت یا وب سرویس )که وظیفشون Marshal و Unmarshal کردن متد ها و خروجی های درخواست های کلاینت های RMI برای اشیاء رمی و بر عکس باشه!اینطوری میتونید علاوه بر حفظ معماری موجود مشکلتون رو حل کنید.

امید وارم مفید بوده باشه .
موفق باشید.

sarajh
دوشنبه 22 مهر 1387, 15:02 عصر
سلام دوستان،مرسی از کمکتون ، ولی متاسفانه مسئله حل نشد:گریه:
قضیه اینه:
ما روی یک شبکه محلی کار می کنیم و یک servr مرکزی داریم.این سرور مرکزی یک ip static به من داده ،و ip خودش را به ip static من redirect میکنه تا برنامه من اجرا شود(یعنی به جای اینکه برنامه مستقیم روی سرور باشه روی کامپیوتر من قرار داره)،برنامه اینطوری که تیکه کد مربوط به سرور روی کامپیوتر من با ip static اجرا میشه ولی تیکه کد مربوط به کلاینت روی یک کامپیوتر بیرون شبکه محلی اجرا میشه و اتصال ان از طریق dialup میباشد.حالا مسئله :
این برنامه را برای تست وقتی روی شبکه محلی اجرا می کنم جواب میده ولی وقتی client به صورت یه کامپیوتر خارج شبکه محلی و dialup وصل میشه جواب نمی ده.
کد برنامه با RMI نوشته شده، برای اینکه بفهمم مشکل از کد یا از REDIRECT کردن ،سوالم اینه؟
code base های rmi تو شبکه محلی با dialup فرق داره یا نه؟
بازم ممنونم از جوابتون.

mazdadoost
دوشنبه 22 مهر 1387, 19:43 عصر
دوست عزیز :

این مسایل رو لطفا روشن کنید:
1-اتصال Dialup شما روی Ras هست یا VPN.
2-Stack Trace کامل خطا و مشکل روی کلاینت Dialup.

بهتره به جواب قبلی هم به دقت نگاه کنید.
موفق باشید.

sarajh
سه شنبه 23 مهر 1387, 14:27 عصر
بازم سلام خیلی شرمنده ،
شبکه diallup اينجا ras
اینم خطای برنامه:
java.rmi.ConnectException: Connection refused to host: 85.15.52.146; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEnd point.java:601)
at sun.rmi.transport.tcp.TCPChannel.createConnection( TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCP Channel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java: 322)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at Project.ir.niopdc.rmiWeb.Client.ClientProperty.<init>(ClientProperty.java:50)
at Project.ir.niopdc.rmiWeb.Client.GUI.ClientUI.<init>(ClientUI.java:88)
at Project.ir.niopdc.rmiWeb.Common.GUI.LoginPage$5.ac tionPerformed(LoginPage.java:186)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener$Actions .actionPerformed(BasicButtonListener.java:287)
at javax.swing.SwingUtilities.notifyAction(SwingUtili ties.java:1636)
at javax.swing.JComponent.processKeyBinding(JComponen t.java:2849)
at javax.swing.JComponent.processKeyBindings(JCompone nt.java:2884)
at javax.swing.JComponent.processKeyEvent(JComponent. java:2812)
at java.awt.Component.processEvent(Component.java:591 1)
at java.awt.Container.processEvent(Container.java:202 3)
at java.awt.Component.dispatchEventImpl(Component.jav a:4501)
at java.awt.Container.dispatchEventImpl(Container.jav a:2081)
at java.awt.Component.dispatchEvent(Component.java:43 31)
at java.awt.KeyboardFocusManager.redispatchEvent(Keyb oardFocusManager.java:1848)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEv ent(DefaultKeyboardFocusManager.java:704)
at java.awt.DefaultKeyboardFocusManager.preDispatchKe yEvent(DefaultKeyboardFocusManager.java:969)
at java.awt.DefaultKeyboardFocusManager.typeAheadAsse rtions(DefaultKeyboardFocusManager.java:841)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent (DefaultKeyboardFocusManager.java:668)
at java.awt.Component.dispatchEventImpl(Component.jav a:4373)
at java.awt.Container.dispatchEventImpl(Container.jav a:2081)
at java.awt.Window.dispatchEventImpl(Window.java:2458 )
at java.awt.Component.dispatchEvent(Component.java:43 31)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 599)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:284)
at java.awt.EventDispatchThread.pumpEventsForFilter(E ventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:122)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl .java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSoc ketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.j ava:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.j ava:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.cre ateSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.cre ateSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEnd point.java:595)
... 37 more
واقعا مرسی از کمکتون

mazdadoost
سه شنبه 23 مهر 1387, 15:40 عصر
با سلام:
لطفا برای دیدن فهرستی از رخ حل ها به این آدرس مراجعه کنید.
http://java.sun.com/j2se/1.5.0/docs/guide/rmi/faq.html
موفق باشید.

sarajh
چهارشنبه 24 مهر 1387, 14:44 عصر
سلام بچه ها من رفتم تو اون link که دادین از socket factory واسه حل مشکلم استفاده کنم
//import java.io.*;
//import java.rmi.*;
//import java.rmi.server.*;
//import java.rmi.registry.*;
//
//public class HelloImpl implements Hello {
//
// public HelloImpl() {}
//
// public String sayHello() {
// return "Hello World!";
// }
//
// public static void main(String args[]) {
//
// if (System.getSecurityManager() == null) {
// System.setSecurityManager(new SecurityManager());
// }
//
// byte pattern = (byte) 0xAC;
// try {
// /*
// * Create remote object and export it to use
// * custom socket factories.
// */
// HelloImpl obj = new HelloImpl();
// RMIClientSocketFactory csf = new XorClientSocketFactory(pattern);
// RMIServerSocketFactory ssf = new XorServerSocketFactory(pattern);
// Hello stub =(Hello) UnicastRemoteObject.exportObject(obj, 0, csf, ssf);
// LocateRegistry.createRegistry(2002);
// Registry registry = LocateRegistry.getRegistry(2002);
// registry.rebind("Hello", stub);
// System.out.println("HelloImpl bound in registry");
//
// } catch (Exception e) {
// System.out.println("HelloImpl exception: " + e.getMessage());
// e.printStackTrace();
// }
// }
//}
//-----------------------
import java.io.*;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
public class HelloImpl implements Hello {
public HelloImpl() {}
public String sayHello() {
return "Hello World!";
}
static public void main(String args[]) {
// if (System.getSecurityManager() == null) {
// System.setSecurityManager(new SecurityManager());
// }
byte pattern = (byte) 0xAC;
try {
/*
* Create remote object and export it to use
* custom socket factories.
*/
HelloImpl obj = new HelloImpl();
RMIClientSocketFactory csf = new XorClientSocketFactory(pattern);
RMIServerSocketFactory ssf = new XorServerSocketFactory(pattern);
Hello stub =
(Hello) UnicastRemoteObject.exportObject(obj, 0, csf, ssf);

LocateRegistry.createRegistry(3232);
Registry registry = LocateRegistry.getRegistry(3232);
registry.rebind("MYrmiServer", stub);
System.out.println("HelloImpl bound in registry");
} catch (Exception e) {
System.out.println("HelloImpl exception: " + e.getMessage());
e.printStackTrace();
}
}

}


code سمت Server اینه ، تو این code به خاطر استفاده از
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
برنامه این خطا رو میده

C:\Borland\JBuilder2006\jdk1.5\bin\javaw -classpath "C:\Documents and Settings\jafary\jbproject\testsocketFactory\classe s;C:\Borland\JBuilder2006\jdk1.5\lib\dt.jar;C:\Bor land\JBuilder2006\jdk1.5\lib\tools.jar;C:\Borland\ JBuilder2006\jdk1.5\lib\htmlconverter.jar;C:\Borla nd\JBuilder2006\jdk1.5\lib\jconsole.jar;C:\Borland \JBuilder2006\jdk1.5\jre\lib\ext\sunjce_provider.j ar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\ext\sunp kcs11.jar;C:\Borland\JBuilder2006\jdk1.5\jre\lib\e xt\dnsns.jar;C:\Borland\JBuilder2006\jdk1.5\jre\li b\ext\localedata.jar;C:\Borland\JBuilder2006\jdk1. 5\jre\lib\im\thaiim.jar;C:\Borland\JBuilder2006\jd k1.5\jre\lib\im\indicim.jar;C:\Borland\JBuilder200 6\jdk1.5\jre\lib\charsets.jar;C:\Borland\JBuilder2 006\jdk1.5\jre\lib\jce.jar;C:\Borland\JBuilder2006 \jdk1.5\jre\lib\deploy.jar;C:\Borland\JBuilder2006 \jdk1.5\jre\lib\plugin.jar;C:\Borland\JBuilder2006 \jdk1.5\jre\lib\javaws.jar;C:\Borland\JBuilder2006 \jdk1.5\jre\lib\jsse.jar;C:\Borland\JBuilder2006\j dk1.5\jre\lib\rt.jar" HelloImpl
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3232 connect,resolve)
at java.security.AccessControlContext.checkPermission (AccessControlContext.java:264)
at java.security.AccessController.checkPermission(Acc essController.java:427)
at java.lang.SecurityManager.checkPermission(Security Manager.java:532)
at java.lang.SecurityManager.checkConnect(SecurityMan ager.java:1034)
at java.net.Socket.connect(Socket.java:501)
at java.net.Socket.connect(Socket.java:457)
HelloImpl exception: access denied (java.net.SocketPermission 127.0.0.1:3232 connect,resolve)
at java.net.Socket.<init>(Socket.java:365)
at java.net.Socket.<init>(Socket.java:178)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.cre ateSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.cre ateSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEnd point.java:569)
at sun.rmi.transport.tcp.TCPChannel.createConnection( TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCP Channel.java:171)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java: 306)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at HelloImpl.main(HelloImpl.java:75)
اگه تیکه if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
را بردارم درست میشه
اگه میشه یکی کمک کنه تو policy.java هم java.security.allpermision رو درست کردم

sarajh
شنبه 27 مهر 1387, 13:04 عصر
هگه کسی در مورد System.securityManager() , لزوم استفاده از اون چیزی می دونه لطفا یه کمکی بکنه
وقتی ازش استفاده می کنم error اینه
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3232 connect,resolve)

manvaputra
شنبه 27 مهر 1387, 21:11 عصر
http://www.tek-tips.com/viewthread.cfm?qid=723324
http://patriot.net/~tvalesky/easyrmi.html

sarajh
یک شنبه 05 آبان 1387, 07:53 صبح
سلام بچه ها باز با diallup درست نشد با وجود اینکه از socketFactory استفاده کردم.
اگه می شه بازم اگه کسی می تونه راهنمایی کنه

sarajh
یک شنبه 05 آبان 1387, 09:04 صبح
اگه کسی میتونه یه تیکه کد rmi که از طریق diallup جواب داده بفرسته ممنون میشم
یا من کدم بفرستم چک کنه ببینه ایراد تز چیه واقعا

sarajh
یک شنبه 12 آبان 1387, 14:22 عصر
سلام
من برنامه rmi رو سیستم nat برنامم
بچه ها لطفا اگه کسی بلد یه راهنمایی بکنه