الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

java RMI

بدأه Game111 في 14 مايو 2011 · 6 رد · 662 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لمن لديه خبرة في هذا الجانب , اريد نقده و تعليقه على هذه الاكواد

Server :

 import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

/**
 *
 * @author NEW
 */
 interface ServerInterface extends Remote
  {
  public String DisplayMessage()
  throws RemoteException;
}
public class Server extends UnicastRemoteObject implements ServerInterface{
    private static String Message="Welcome to our server";

    public Server() throws RemoteException {
        super();
    }

    public String DisplayMessage() throws RemoteException {
        return Message;
    }
    public static void main(String[]args)
    {
       try
       {
           Server obj=new Server();
           Naming.bind("service", obj);

       }
       catch (RemoteException e)
  {
          System.out.println(""+e.getMessage());
       }
        catch (AlreadyBoundException e)
       {
           System.out.println(""+e.getMessage());
       }
       catch (MalformedURLException e)
       {
           System.out.println(""+e.getMessage());
    }



}
}

Client:

 interface ServerInterface extends Remote
{
    public String DisplayMessage() throws RemoteException;
}
public class Client  {
public void main (String args[]) throws MalformedURLException

{
    URL url=new URL("rmi://"+args+"/service");  
    try
    {
        ServerInterface handle=(ServerInterface)Naming.lookup("rmi;//newtech/service");
    }
    catch (Exception e)
    {
        System.out.println(""+e.getMessage());
    }
System.out.println(handle.DisplayMessage);
}
}

علما ان البرنامج لا يعمل , و الخطأ من اعداد الخطوات

#2

اعتقد انه عليك في الكلاس تبع الكلاينت ان تضع الجملة

 System.out.println(handle.DisplayMessage());

داخل جملة try

نقطه اخرى لقد قمت بتعريف اثنين interfaces بالاسم ServerInterface

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3

قم بفصل وكتابة الواجهة ServerInterface فى ملف منفصل وسمه ServerInterface.java

وقم بترجمته compile وتحزيمه فى مكتبة .jar وضعه فى مسار البرنامج العميل client classpath وكذلك برنامج الخادم server

فى انتظار النتيجة

بالتوفيق


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#4
mental-driller كتب:

اعتقد انه عليك في الكلاس تبع الكلاينت ان تضع الجملة

 System.out.println(handle.DisplayMessage());

داخل جملة try

نقطه اخرى لقد قمت بتعريف اثنين interfaces بالاسم ServerInterface

بالفعل , انا نسيت الاستدعاء و لكن interface لهم نفس الاسم و لكن في ملفين منفصلين من نفس الحزمة (package) هل ينفع او لازم اكتب interface باسمين مختلفين ؟؟؟

و بخصوص الاستدعاء هل ضروري بأن يكون داخل try او ممكن انه يكون خارجها ؟؟

شكرا على انتقادك ,

#5
MOHAMED FATHEI كتب:

قم بفصل وكتابة الواجهة ServerInterface فى ملف منفصل وسمه ServerInterface.java

وقم بترجمته compile وتحزيمه فى مكتبة .jar وضعه فى مسار البرنامج العميل client classpath وكذلك برنامج الخادم server

فى انتظار النتيجة

بالتوفيق

تعليقك فيه الاجابة التي كنت اود التوصل اليها و هي مكتبة jar , فعلا بحثت في النت فأيقنت ان المشكلة في تحزيم الملفات بمكتبة jar , و لكن لم اعرف كيف احل المشكلة ,, و بكلامك فهمت

هل قصدك بأن اكتب interface في ملف منفصل لكن من srver و client ؟؟

اشكرك على المشاركة

#6

بما انك عملت اثنين interfaces في نفس الpackage بيكونوا مرئين لبعض ، كما انه الانترفايس للسيرفر يعني مافي داعي تعمله في ملف الكلاينت

الا اذا كان هناك غرض اخر في نفسك من هذا الانترفايس

بالتأكيد الاستدعاء يكون داخل الtry او داخل finally اذا عملت واحدة اذا لا تريد الاستدعاء تخلص من exception handling

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#7

وفى رأيك كيف سيستخدم هذا السطر فى العميل ؟

ServerInterface handle=(ServerInterface)Naming.lookup("rmi;//newtech/service");

الا يستوجب هذا وجود الواجهة ServerInterface فى مسار التشغيل للبرنامج classpath ؟


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

مواضيع مشابهة