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

برنامج محادثة بدون خادم

رائج
بدأه Dr.Robert في 25 فبراير 2010 · 71 رد · 6,672 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26
اقتباس
بالنسبة للأخ محمد علاو

سأوضح لك الموضوع بمثال

أنا وأنت نريد أن نعمل على على برنامج موظفين

سنقوم في البداية بتحديد الفئات الأساسية

بمعنى آخر وضع خطوط عريضة للبرنامج

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

ونكتب Interface يصف آلية العمل ما بين الفئات المختلفة مع توثيق لعمل كل دالة في الفئة

ثم بعد هذا سنحدد لكل منا مجموعة من الواجهات عليه أن يقوم بعملية بنائها

يقوم كل منا ببناء الفئات الخاصة به بمعزل عن الآخرين

ثم نقوم بعمل جلسة مراجعة لكل الفئات التي قمنا بكتابتها ونرى هل فعلاً يوجد تضاد بين ما كتبناه جميعاً

أو يوجد نوع من عدم الفهم أو غياب بعض النقاط

بعد هذا يقوم كل منا بفحص الدوال التي قام بكتابتها عن طريق TestCases

يكتبها لكل حالة

وبهذا نكون أنهينا البرنامج ككل

ربما الفكرة التي اقترحتها تصلح في مرحلة المراجعة وما بعدها

أها فهمت فكرتك , بس هذه هي الطريقه المستخدمه بالفعل , ولكن المشكله في انه لو حد من الفريق أنهى مهمته فعليه ان ينتظر حتى ينتهوا البقية عشان يدمجوا كل الجزئيات , لكن اقصد إمكانية الإضافه في نفس الوقت وكأن الكل يعملوا على نفس المحرر , فهمت قصدي؟


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#27
اقتباس

أخ مازن أنا لا أتكلم هنا عن أخطاء المستخدمين للحزمة وإنما أتكلم عن أخطاء المطورين للحزمة (لنقل أن الموضوع مقتصر عليك حالياً)

اخ علاء

حسبتك تسأل فقط عن سبب وجود الحقول التي صلاحية دخولها من الحزمة فقط (او كما يطلق عليها default fields) ولماذا هي كذلك وليست private.

اقتباس
أخ مازن بالنسبة لموضوع encapsulation

في بعض الأحيان أجدك تجعل كل الحقول fields خاصين بالكائن private

مثل الفئة NetworkService

وفي فئات أخرى تتركها تحت نطاق الحزمة package

مثل الفئة McastPacketReceiver والفئة PacketReceiver

هل من سبب معين؟

موضوع الاخطاء التي قد تصاحب التصميم موضوع مختلف. وليس من السهل نقاشة على ضوء ملاحضات متعلقة بصلاحيات دخول حقول بعض الفئات.

الكلام الذي كتبتة صحيح , عندما يكون التصميم غير مستقر او غير موثق بشكل سليم بين المطورين.

مسألة الحقول default بدون setter & getterمستخدمة في عدة حزم فيjdk ,وهي ليست المشكلة بقدر ان سوء الإستعانة بها قد يعرضك لمشاكل.

اخ محمد

اقتباس
ها فهمت فكرتك , بس هذه هي الطريقه المستخدمه بالفعل , ولكن المشكله في انه لو حد من الفريق أنهى مهمته فعليه ان ينتظر حتى ينتهوا البقية عشان يدمجوا كل الجزئيات , لكن اقصد إمكانية الإضافه في نفس الوقت وكأن الكل يعملوا على نفس المحرر , فهمت قصدي؟

اعتقد ان هذة ليست مشكلة , المشكلة هي انة عندما يضطر احدهم للإنتظار لشخص اخر لينتهي من عملة قبل ان يتمكن من البدء اصلا , هذة المشكلة محلولة في البرمجة بإستخدام اسلوب interface. حيث تجعل كل واحديعمل بمعزل عن عمل الاخر.

حتى لو كانوا يعملوا في محرر واحد وانتهى احدهم سيضطر للإنتظار (وإلا يروح يشتغل بدالهم :P )

اعتقد ان المشكلة التي ذكرتها هي مشكلة في الجدول الزمني الذي وضع للمبرمجين او تقسيم العمل نفسة حيث انة غير متناسق . هذا رأيي على العموم.

تم تعديل هذه المشاركة بواسطة Dr.Robert في 2 مارس 2010 في 04:12

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#28

خسارة يعني فشل مشروعي؟Bg_029.gif عادني كنت ناوي أسجل براءة إختراع كخخخخخخخخخخ


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#29

في البداية كنت أسأل أخ مازن

قلت في نفسي ربما هناك سبب

فلما وجدت أني لم أقتنع بأسبابك

قلت لماذا لا أتكلم

اقتباس

الكلام الذي كتبتة صحيح , عندما يكون التصميم غير مستقر او غير موثق بشكل سليم بين المطورين.

عن نفسي لا أرى موضوع التصميم المستقر أو التوثيق السليم

يحل مشاكل مثل نسيت أو غاب عن ذهني

هذه المشاكل متأصلة في اللاوعي البشري بطريقة رهيبة

اقتباس

مسألة الحقول default بدون setter & getterمستخدمة في عدة حزم فيjdk ,وهي ليست المشكلة بقدر ان سوء الإستعانة بها قد يعرضك لمشاكل.

هل يكفي أن نقول فلان يستخدم الشيء لإثبات أن استخدامه جيد أو سيء

في وجهة نظري لا يكفي

حتى لو كان فلان هذا هو مؤسس الجافا نفسه

ما لم يكن هناك أسباب مقنعة

على كل كما قلت مسبقاً الأمر عائد لك في كل الأحوال

أخ محمد

المشروع ليس بالسوء الذي تتكلم عنه

خصوصاً لو كان هناك ملفات مشتركة بين أكثر من مبرمج يتم العمل عليها في نفس الوقت

كما لا تنسى أن هناك من يجد طريقة العمل على نفس الفئات طريقة رائعة

وأن عملية البرمجة باستخدام interface ماهي إلا مضيعة للوقت

(في بعض الأحيان يكون الكلام صحيحاً)

على العموم لا تفرح كثيراً فلا براءة اختراع هنا

يوجد فعلياً ما يسمى بـ svn وبروتكولات الاعتماد commit protocol :lol:

تحياتي

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

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

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

728x90.png

#30
اقتباس

هل يكفي أن نقول فلان يستخدم الشيء لإثبات أن استخدامه جيد أو سيء

في وجهة نظري لا يكفي

حتى لو كان فلان هذا هو مؤسس الجافا نفسه

ما لم يكن هناك أسباب مقنعة

:lol: هذا ليس قصدي بالطبع.

الخبرة هي التي تحكم .

ولكن لا اعتقد أن هذا كافي مادمنا دخلنا في علم النفس واللاوعي البشري.

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#31

أخ مازن هل يمكنك أن تشرح لي آلية كتابة هذا البرنامج

أقصد كيف تستطيع القيام بالتعرف على وجود الأجهزة مع أنك لا تعرف فعلياً إن كان هناك جهاز

ولا يوجد خادم يربط بين الجميع؟

(أقصد من ناحية الشيفرة)

تحياتي

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

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

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

728x90.png

#32
علاء الصالحي كتب:

أخ مازن هل يمكنك أن تشرح لي آلية كتابة هذا البرنامج

أقصد كيف تستطيع القيام بالتعرف على وجود الأجهزة مع أنك لا تعرف فعلياً إن كان هناك جهاز

ولا يوجد خادم يربط بين الجميع؟

(أقصد من ناحية الشيفرة)

تحياتي

مسألة التعرف على الأجهزة هي بالكامل مسؤولية الفئة NetworkService .

انظر للدالة requestClientsInfo() والدالة sendInfo() .

الاولى ترسل رسالة (بث) تطلب من جميع الاجهزة المستلمة ان يقوموا بالتعريف عن انفسهم . والثانية يستدعيها العميل للتعريف بنفسة للاخرين (ايضا بث)

يعني استدعاء الاولى في جهاز يؤدي لإستدعاء الثانية في جهاز اخر. (بشرط ان كل جهاز يشغل غرض NetworkService متنصتة على نفس عنوان ومنفذ البث ) .

وبالتالي الاجهزة التي تشغل NetworkService بنفس اعدادات البث الخاصة بالفئة بإمكانها ان "ترى" بعضها البعض. وبالتالي التواصل.

هذة الدوال يتم استدعائها داخليا في الفئة NetworkService عند تشغيل الخدمة وعند الحاجة ولا حاجة للمستخدم في استدعائها في اغلب الاحوال . ولكن بإمكانك استدعائها رغما عن ذلك .

ملاحضة :

لقد قمت برفع النسخة المحدثة من الحزمة في موقع Sourceforge .

وتم تغيير اسماء الدوال المذكورة الى requestStateInfo و sendStateInfo بالترتيب.

تم تعديل هذه المشاركة بواسطة Dr.Robert في 7 مارس 2010 في 19:57

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#33

أخ مازن قصدت أنت تستخدم UDP في الاتصال

لكن كيف تستطيع الإرسال مجموعة المستخدمين الذين يعملون على نفس البرنامج

(لا أقصد كيف أقوم بذلك من الحزمة وإنما أقصد كيف أقوم بذلك في جافا)

تحياتي

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

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

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

728x90.png

#34
علاء الصالحي كتب:

أخ مازن قصدت أنت تستخدم UDP في الاتصال

لكن كيف تستطيع الإرسال مجموعة المستخدمين الذين يعملون على نفس البرنامج

(لا أقصد كيف أقوم بذلك من الحزمة وإنما أقصد كيف أقوم بذلك في جافا)

تحياتي

بالنسبة للإرسال لأكثر من عميل , يتم استخدام java.net.MulticastSocket او java.net.DatagramSocket وهي super class للأولى.

مسألة الإرسال غير مختلفة في ارسال رسالة لعميل واحد او عدة عملاء لأنك في الحالتين تحدد العنوان والمنفذ الذي سترسل الية و هذا العنوان قد يكون عنوان بث مثل 232.0.0.1 او عنوان جهاز واحد مثل192.0.0.1 وفي حالة الإرسال لا فرق بين استخدام اي من الفئتين.

عناوين البث هي عناوين خاصة وهي لا تستخدم لعنونة اجهزة ولكن تستخدم لهذا الغرض , اي ارسال رسائل لأكثر من عميل. وهي مجموع العناوين التي تتراوح من 224.0.0.0 الى 239.255.255.255. ( 224.0.0.0 محفوظ و غير قابل للاستخدام)

وتسمى عناوين الفئة D .

للتنصت على رسائل البث (الرسائل المرسلة لكل عميل) يجب استخدام java.net.MulticastSocket من قبل كل عميل حيث ان الجميع ينظموا لgroup واحد (اي يتنصتوا على عنوان ومنفذ بث واحد)

وللتعرف على طريقة استخدامها للتنصت راجع الفئة MCastReceiver من الحزمة .

و للتنصت على الرسائل الخاصة نستخدم java.net.DatagramSocket

وللتعرف على طريقة استخدامها للتنصت راجع الفئة PacketReceiver من الحزمة .

تم تعديل هذه المشاركة بواسطة Dr.Robert في 8 مارس 2010 في 00:21

1

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#35

طيب إلى أين تتوقف العملية أقصد لو أرسلت إلى عنوان بث مثال 239.255.255.255

هل يرسل إلى كل الأجهزة على شبكة الإنترنت؟

تحياتي

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

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

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

728x90.png

#36

جميع الاجهزة التي في الgroup الواحد . اي التي تتنصت على الرسائل القادمة لذلك العنوان على منفذ معين , 123 مثلا.

ستستقبل جميع الرسائل المرسلة لذلك العنوان و المنفذ.

هذا صحيح من الناحية النظرية.

من الناحية العملية فإن المسألة غير موثوقة بسبب البروتوكول.

بروتوكول UDP غير موثوق unreliable والرسائل قد لا تصل لكل العملاء.

فمثلا اذا كان العميلين A وB في نفس الgroup وكان يفصل بينهما 10 routers وكانت صلاحية الpacket المرسل للgroup هي 8 . فإن الرسائل المرسلة من A لن تصل لB لأن الpacket ستنتهي صلاحيتة عند router9 , يعني ان الpacket سيمرر بالفعل بإتجاة B ولكنة لن يصل بسبب طول المسافة. والعكس صحيح عندما يكون المرسل هو B

العملية موثوقة اكثر عند استخدام هذا الاسلوب في تبادل الرسائل بين الاجهزة التي تحمل نفس قناع الشبكة الفرعية subnet mask لأن الpacket لا يحتاج لأن يعبر اي router للوصول لجميع اعضاء الgroup

وبالتالي ليس هناك قلق من انتهاء صلاحية الpacket قبل وصولة لاي عميل.(ولكنة قد لا يصل لأسباب اخرى وسيظل UDP غير موثوق)

تم تعديل هذه المشاركة بواسطة Dr.Robert في 8 مارس 2010 في 21:30

1

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#37

اهااااااااااااااااااااااا

اعتقدت أن عناوين البث تعمل فقط في داخل الشبكة المحلية

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

تحياتي

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

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

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

728x90.png

#38

كنت اعتقد نفس الاعتقاد , حتى بعد ان انتهيت من تصميم الحزمة.

وعرفت العكس بعد ان انتهيت من اول برنامج بإستخدام الحزمة.(برنامج الشات).

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

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#39

أخي الكريم

شكراً لك

كنت أريد أن أعرف كيف تقوم بعمل ملف exe

كما هو الحال في مشروعك

لفتح ملف الـ jar

الخاص بك

ولك مني كل الإحترام والتقدير

#40

استخدمت البرنامج التالي

http://launch4j.sourceforge.net/

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#41

حمل البرنامج (بعد التعديل) من رابط المدونة

http://mbanafa.blogspot.com/p/blog-page_2060.html

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#42

جربت البرنامج جميل جدا

لكن لا استطيع المشاركة (ضعيف فى الشبكات)

شكرا لك على البرنامج

تحياتى


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

الأنفال ۳۳                                  
 

#43

اخى الكريم على اى IDE?

00020309t.gif

1958_1963.gif
#44
اسراء شلبى كتب:

اخى الكريم على اى IDE?

على NetBeans .

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#45

شكرااااااا

جزاك الله كل خير

00020309t.gif

1958_1963.gif
#46

انا فعلا جربته

ولكن لا يوجد احد متصل :unsure: :unsure:

−1

Software Developer
Mahmoudkelany.com


 

#47

لا أعلم أخ مازن

لكني غير مهتم بتجربة البرنامج وإنما مهتم بطريقة البرمجة :lol:

تحياتي

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

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

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

728x90.png

#48
علاء الصالحي كتب:

لا أعلم أخ مازن

لكني غير مهتم بتجربة البرنامج وإنما مهتم بطريقة البرمجة :lol:

تحياتي

وانا مؤيد اخى علاء :wacko: :wacko:

ولكن لا مانع من تجربته ايضا :lol: :lol:

−1

Software Developer
Mahmoudkelany.com


 

#49
علاء الصالحي كتب:

لا أعلم أخ مازن

لكني غير مهتم بتجربة البرنامج وإنما مهتم بطريقة البرمجة :lol:

تحياتي

اهااااااااااااااا , علاء الصالحي يصطاد مره اخرى....

السبب الوحيد في احتفاظي بكود البرنامج حتى الان هو اني "لسه مش مالي ايدي " لا من فكرته ولا من الكود :ph34r: .

يعني ممكن افتح على نفسي جبهة :unsure: اذا وضعت الموضوع للنقاش وانا مش جاهز (وخصوصا مع خبراء الشبكات والأمن :ph34r: وتطبيقات سطح المكتب)

لأني استخدمت اساليب قد تكون غير مألوفه في عالم تطبيقات الشبكات.

وانت "تعرفني :P " لا احب ان افتح موضوع إلا وانا اعرف عن ماذا اتحدث. .

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#50
اقتباس
لسبب الوحيد في احتفاظي بكود البرنامج حتى الان هو اني "لسه مش مالي ايدي " لا من فكرته ولا من الكود

كدة افضل

او ممكن تعرض الكود و اللى يسأل فى اى حاجة عضويته تتوقف فورا............ :lol:

00020309t.gif

1958_1963.gif

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…