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

المساعدة في ارسال object من جهاز لاخر

بدأه raouf_dz في 20 ديسمبر 2011 · 5 رد · 594 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اعمل على برنامج يشتغل كالتالي

في جهازي انا يوجد واجهة لبرنامج لاستطيع الاتصال مع قاعدة البيانات ويوجد جهاز اخر به نفس الشىء

في جهازي فرضا هناك جدول ولكن a

وفي الجهاز الاخر هناك جدول وليكن b

عندما اريد الاستعلام(select) عن المعلومات الموجود في الجهاز الاخر وفي حالتي هو الجدول b ابعث requet الى الجهاز الاخر فيستقبلها البرنامج هناك ويقوم بالتعامل مع الجدول ويرجع المعلومات في كائن من نوع ResultSet

ما اريده هو كيفية ارجاع هذا الكائن الى الجهاز الاول ومن ثم قراءته وعرضه

والسلام عليكم

#2

يمكنك باستخدام :

Socket

أو

RMI

تحياتي.

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#3

السلام عليكم

انا اعلم اخي الكريم واستطعت ان انقل بعض الكلمات

لكن ككائن لم استطع

فهل عندك مثال يشرح الفكرة

#4

ككائن بإمكانك باستخدام الـ RMI

مثال بسيط :

interface :

import java.rmi.Remote;
import java.rmi.RemoteException;


public interface INTERFACE extends Remote {
	public void Applay(process p) throws RemoteException;
}

process class

import java.io.Serializable;
import java.util.Arrays;
import java.util.Random;
public class process implements Serializable {

	private int [] p0 =null;
	private int[] p1 = null;
	private int size = 0;
	public process(int SIZE) {
		this.size = SIZE;
		initializeProcesses();
	}
	private void initializeProcesses(){
		p0 = new int[this.size];
		p1 = new int[this.size];
	}
	private void setProcess(int [] first,int[] second){
		this.p0 = first;
		this.p1= second;
	}
	public boolean fillProcess(){
		boolean done =false;

		Random rnm = new Random();
		for(int i=0; i<p0.length;i++){
			int val = rnm.nextInt(100);
			int val2 = rnm.nextInt(100);
			p0 = val;
			p1 =val2;
		}
		done =true;
		return done;
	}

	public int [] getProcess(int i) {
		if(i == 0){
			return p0;
			}
		else{
			return p1;
			}
	}
	public int getMax(int i){
		int max = 0;
		try{
		for(int element:getProcess(i)){
			if(element > max){
				max = element;
			}
		}}catch(Exception e){
			System.out.println("number must be 0 or 1 !");

		}
		return max;
	}
	public int getMin(int i){
		int min =100;
		try{
		for(int element:getProcess(i)){
			if(element < min){
				min = element;
			}
		}}catch(Exception e){
			System.out.println("number must be 0 or 1 !");

		}
		return min;
	}

	public boolean swap(){
		boolean done = true;
		int [] all = new int [this.size*2];
		System.arraycopy(getProcess(0), 0, all, 0, getProcess(0).length);
		System.arraycopy(getProcess(1), 0, all, getProcess(0).length, getProcess(1).length);
		Arrays.sort(all);
		System.arraycopy(all, 0,getProcess(0), 0, getProcess(0).length);
		System.arraycopy(all,getProcess(0).length ,getProcess(1), 0, getProcess(1).length);
		Arrays.sort(this.p0);
		Arrays.sort(this.p1);
		return done;
	}

}

Server:

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;


public class SERVER  extends UnicastRemoteObject implements INTERFACE {

	protected SERVER() throws RemoteException {
		super();
		// TODO Auto-generated constructor stub
	}

public void Applay(process p) throws RemoteException{

		p.fillProcess();
		System.out.print("\nProcess 0 elements are:\n");
		for(int i : p.getProcess(0)){
			System.out.print(i+"   ");
		}
		System.out.print("\nProcess 1 elements are:\n");
		for(int j : p.getProcess(1)){
			System.out.print(j+"   ");
		}
		p.swap();
		System.out.print("\nProcess 0 elements AFTER SWAPING are:\n");
		for(int s : p.getProcess(0)){
			System.out.print(s+"   ");
		}
		System.out.print("\nProcess 1 elements AFTER SWAPING are:\n");
		for(int n : p.getProcess(1)){
			System.out.print(n+"   ");
		}

	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try{
			Registry r = LocateRegistry.getRegistry();
			SERVER INF = new SERVER();
			r.rebind ( "Server", INF );
			System.out.println("SERVER IS READY!\n************\n");
		}catch(Exception e){
			e.printStackTrace();
		}


	}

}

Client :

import java.rmi.Naming;
import java.rmi.RMISecurityManager;


public class CLIENT {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			System.setSecurityManager(new RMISecurityManager());
			INTERFACE s = (INTERFACE) Naming.lookup("rmi://localhost/Server");
			process p = new process(3);
			for(int i= 0;i<2;i++){

			s.Applay(p);
			}
			//System.out.println("DONE!!!");
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}

لو فيه شي غامض انا بالخدمة.

تحياتي.

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#5

استخدم La sérialisation

تم تعديل هذه المشاركة بواسطة sahraoui17 في 20 ديسمبر 2011 في 16:39

1
#6

مبدئياً الكائن من النوع ResultSet لا يصلح للإرسال لاتصاله بقاعدة البيانات

حتى لو قمت بإرساله لا فائدة من ذلك

الأصل أن تأخذ ما تحتاجه منه وتعبئه في كائن خاص بك وتعيد إرساله

أما لماذا لم تستطع إرساله لأن الكائن بالأغلب لا يقوم ببناء serializable

في الكائن الجديد الذي اتفقنا على أنك ستقوم بإرساله إلى المستخدم اجعل الفئة تقوم ببناء Implement للواجهة Serializable

تحياتي

2
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

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