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

المشروع العربى

مغلق
بدأه NUCLEAR في 10 ديسمبر 2005 · 39 رد · 2,658 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26

تستطيع تقسيم الكلامات بسهولة لو استخدمت StringTokenizer لكن الظاهر أنه في ذلك الوقت لم تعرفها!

---------

هذا هو المشروع البسيط الموصوف في الأعلى،، عندنا الخادم هو RamyServer وهو يقبل الأوامر الجديد،، وعندنا أيضا العميل Client حاليا وظيفته يقوم بإضافة أمر جديد اسمه Add وظيفته جمع رقمين!، وبعد ذلك يقوم العميل بإرسال أمر Add 4 6 إلى الخادم ويرجع له الجواب.. طبعا تستطيع إضافة البرامج أو الأوامر الجديدة بسهولة فقط بعمل وراثة للفئة Program.

الشفرة متاحة،، استخدمت Java 5، آسف شباب!،،

إذا كنت تستخدم إصدارات أقدم، فعليك بعد عمل الترجمة أن تترجم الملفات باستخدام rmic وليس فقط javac،،

شغل الخادم أولا وبعدها شغل العميل!

بالتوفيق!

src.zip

#27

لم ينته المشروع رامى ولكن التجاوب بطيييئ منذ البدايه

واجهتنى مشكلة حمقاء اثناء بناء الClient

ولا علاقة لها بالجزء الفنى او الكود ولكنها تنتج من تهنيج الجهاز لجزء من الثانيه عندما يقوم البرنامج بتخزين Screen shot الى القرص الصلب وتأكدت من سبب ذلك وهو ضخامة حجم ملف الScreen shot مع انه حوالى 42 كيلو بايت (صغير)

وفكرت فى حل و هو تصوير اجزاء من الشاشه (تقسيمها الى 4 ) ثم تخزين كل جزء وحده ولكن:

1- هل يؤدى ذلك الى نفس النتيجه عندما يقوم البرنامج بتخزين ال4 اجزاء متتالين؟(بافتراض انه سيستطيع التقاط 4 اجزاء متزامنه)

2- هل يؤدى ذلك الى عدم تزامن اللقطات؟

3- هل يمكن ان يؤدى الMulti threading الى حل لهذه المشكله؟

<_<

لدى اقتراح يمكن ان يضيف ميزة قويه للبرنامج(و لكن حقوق النسخ محفوظه للمؤلف® :D :lol: )

امكانية ان يرسم الController على شاشة الRemote و يكتب له رسائل تظهر مثل Tool TIP فى اماكن يحددها الController

و يمكن استخدام هذه الميزه تعليميا و للدعم الفنى <_<

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#28

اجعل الحفظ في خيط أو Thread مختلف طبعا!

بالتوفيق!

#29

لماذا لا تضع لنا ما تفعله يا اخ NUCLEAR

حى يصبح التجاوب سريع!!

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#30

انا لم اقم بعمل اى شىء وعلى العموم هذا كود التقاط الScreen Shot

يمكنك اخذ عدة لقطات متتاليه لملاحظة المشكله التى تحدثت عنها

//Screencapture Class
import java.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;
import javax.*;

	public class Screencapture{
   	 public Screencapture(String fileName,String type) {
      takeScreenshot(fileName,type);}
      
   	 public Screencapture() {
      String fileName=JOptionPane.showInputDialog("Insert File Name:");
      String type=JOptionPane.showInputDialog("Insert Output Type:");
      takeScreenshot(fileName,type);}
   	 public static String takeScreenshot(String fileName,String type) {
                     try {
                         
                         Toolkit toolkit = Toolkit.getDefaultToolkit();
                         Dimension screenSize = toolkit.getScreenSize();
                         Rectangle screenRect = new Rectangle(screenSize);
                         Robot robot = new Robot();
                         BufferedImage image = robot.createScreenCapture(screenRect);
                         ImageIO.write(image,type, new File(fileName));
                         return "Screen Captured";
                     } catch (Exception e) {
                         System.out.println(e);
                         return String.valueOf(e);
                     }

     }
	}

اقتباس
اجعل الحفظ في خيط أو Thread مختلف طبعا!

بالتوفيق!

هل من مزيد من الشرح؟ :lol:

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#31

تذكرون أنا أضفنا أمرا اسمه Add إلى خادم رامي وأصبح يجمع رقمين. أما الآن فأضفت إليه الأمر Shoot والذي يلتقط صورة ويرسلها إلى العميل!!

سأحاول الشرح قليلا:

هذه هي بنية الخادم المتطور!:

import java.util.*;
import java.rmi.*;
public interface ProgramServer extends Remote{
	/**exuecute this program with these arguments.
  **/
    public Object execute(String programName, List<String> arguments)
      throws RemoteException;
    /**Adds this program to the server
     */
    public void addProgram(Program p)throws RemoteException;
    /**Returns a list of program names.
     */
    public List<String> getAvailablePrograms()throws RemoteException;
}

لاحظ أن الخادم حاليا يدعم 3 أوامر فقط،، وهي:

1- نفذ البرنامج التالي.

2- أضف البرنامج التالي.

3- اعرض أسماء البرامج المتوفرة.

في الملفات المرفقة عندنا:

public interface ProgramServer extends Remote وهذا هو بنية الخادم
public class RamyServer extends ProgramServer وهذا هو الخادم المنفذ.
public abstract class Program implements java.io.Serializable وهذا هو بنية أي برنامج من البرامج مثل Add و Shoot وأي برنامج تريده. 
public class AddProgram extends Program وهذا هو برنامج الجمع!
public class ScreenShotProgram extends Program وهذا هو برنامج التقاط الصورة!

public class Client وهذا برنامج عادي يضيف البرامج إلى الخادم ويستخدمها!!

لاحظ أن الخادم كان يعمل،،، وبعدها أضفت إليه البرنامج من العميل والخادم يعمل،، وبعدها طلبت منه صورة والخادم يعمل...

ليس هذا فقط،،، حاول إطفاء الخادم وتشغيله من جديد... ستلاحظ أنه محتفظ بكل البرامج التي أضيفت إليه في السابق!! أي أنك لست بحاجة إلى إضافتها من جديد! لو الخادم تعطل.. لا تحزن لأن البرامج محفوظة!!

شكرا لوضعك شفرتك أيها (النووي) ،، وبفرض أنك وضعت عملك منذ البداية لوصلنا إلى أكثر من هذا..

بهذا تم تنفيذ إرسال الصورة من الخادم إلى العميل بسهولة بعمل برنامج صغير:

package hussam.simpleServer.programs;
import hussam.simpleServer.*;
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;
public class ScreenShotProgram extends Program {

	public ScreenShotProgram(){
  super("Shoot");
	}
	public Serializable execute(java.util.List<String>arguments){
  try {
 	 Toolkit toolkit = Toolkit.getDefaultToolkit();
 	 Dimension screenSize = toolkit.getScreenSize();
 	 Rectangle screenRect = new Rectangle(screenSize);
 	 Robot robot = new Robot();
 	 BufferedImage image = robot.createScreenCapture(screenRect);
 	 ImageIcon icon=new ImageIcon(image);
 	 
 	 return icon;
  } catch (Exception e) {
 	 System.out.println(e);
 	 return String.valueOf(e);
  }

	}
}

هذه شفرة الإصدار 2.3 من (خادم رامي)

src.zip

#32

هذا برنامج آخر اسمه ImageClient متخصص في طلب صورة كل ثانية وعرضها على الشاشة!!

طبعا يجب أن يكون الخادم عنده برنامج Shoot كما تعلم..

ImageClient يقوم بطلب هذا البرنامج كل ثانية، ويعرض النتائج كل ثانية..

ملاحظة: أنا أستخدم كلمة (برنامج) للدلالة على شيء أو Object يتم تنفيذه عند الخادم، ولا يعني أنه برنامج تنفيذي EXE!!

هذا شفرة البرنامج،، وفيه شرح بسيط في استخدام Thread وكيفية الرسم على JPanel كل ثانية!!

package hussam.simpleServer.client;

import javax.swing.*;
import java.awt.*;
import java.rmi.*;
import java.rmi.registry.*;
import hussam.simpleServer.*;
import java.util.*;
public class ImageClient extends JPanel{
	ProgramServer server;
	Image currentImage;
	public ImageClient(final long every)throws RemoteException, NotBoundException{
  Registry r=LocateRegistry.getRegistry(1099);
  server=(ProgramServer)r.lookup("Ramy");
  server.addProgram(new hussam.simpleServer.programs.ScreenShotProgram());
  Thread t=new Thread(new Runnable(){
 	 public void run(){
    while(true){
   	 try {
      currentImage=((ImageIcon)server.execute("Shoot", null)).getImage();
      repaint();
      Thread.sleep(every);
        }
        catch (Exception ex) {
       	 ex.printStackTrace();
        }
    }
 	 }
  });
  t.start();
	}
	public void paint(Graphics g){
  super.paint(g);
  g.drawImage(currentImage,0,0, null);
	}
	public static void main(String []args)throws Exception{
  JFrame f=new JFrame();
  f.add(new ImageClient(1000));
  f.pack();
  f.setVisible(true);
  f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
	}
}

بالتوفيق!!

#33

WAW

لم اعتقد ان مثل هذه الشفره تؤدى لأى تقدم

شكرا ابو مازن

ولكن هل يمكن ان نجعل البرنامج Multithreaded كما قلت انت من قبل؟

و كيف?????? (اعذرنى فانا لا أعرف شيئا عن الMultithreading)

تم تعديل هذه المشاركة بواسطة NUCLEAR في 19 ديسمبر 2005 في 17:22

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#34

هو MultiThreaded أو متعدد الخيوط!

العميل ينادي على أمر

 server.execute("Shoot", null)

في Thread مختلف عن الخيط الأساس! وعملية تحديث JPanel تتم في Thread مختلف!،، هذا يعني أن برنامجك لن يتأثر... لاحظ معي أن أرسل الصورة من الخادم إلى العميل من غير إنشاء ملف،، أرسل الصورة مباشرة!

#35

هذا ما كنت احاول الوصول له (ارسال الصورة دون تخزينها)

شكرا ابو مازن

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#36

ماذا عن هذا الاقتراح؟

NUCLEAR كتب:
لدى اقتراح يمكن ان يضيف ميزة قويه للبرنامج(و لكن حقوق النسخ محفوظه للمؤلف® :D  :lol: )

امكانية ان يرسم الController على شاشة الRemote و يكتب له رسائل تظهر مثل Tool TIP فى اماكن يحددها الController

و يمكن استخدام هذه الميزه تعليميا و للدعم الفنى <_<

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#37

لوظهرت في الخادم tooltip لظهرت عند العميل من خلال نسخ الصورة!

عموما،، طور الفكرة كما تشاء!

#38

انا اقصد العكس

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#39

هذا رابط لموقع يعرض مشروعا مشابها"

لبرنامج Chat

http://www.dcs.napier.ac.uk/~bill/java_sockets.html

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#40

للرفع..............

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.

هذا الموضوع مغلق.

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