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

اين يجب ان اضع الكود الخاص ب Udp والمسئول عن نقل البيانات بين السيرفر والكلاينت

بدأه Kmarwani في 31 أكتوبر 2009 · 10 رد · 1,521 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تحيه طيب

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

distributing system

وهو صورة مبسطه لنظام بنكي

الكود جزئين

جزء على

client side

وفي هذا الجزء

العميل يطلب بعض العمليات

كالايداع

والسحب

والتحويل من حساب الى آخر

اما جزء

Server side

نعم العميل مثلا يطلب ايداع من جهته لكن الـ

method

فعليا موجوده على السيرفر

كيف يمكن عمل ذلك ؟

هنا طريقتين شائعتين

الاولى عن طريق

RMI

Remote Method Invocation

الثانيه عن طريق

corba

الطريقه الاولى لا تعمل الا مع الجافا

يعني السيرفر والكلاينت لازم كلهم جافا

لكن الثانيه ممكن تستخدم كـ

middleware

بين اي

platform

يعني مثلا العميل مشغل جافا والسيرفر مثلا برنامج بالسي او غيره

--------------------------

ان شاء الله المعلومات السابقه تكون مفيده لأحد ,...ماحبيت يكون موضوعي فقط سؤال

--------------------------

السؤال

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

corba

ولا عندي اي مشاكل فيها

خصوصا في العمليات

ايداع

سحب

استعلام عن الرصيد

لأنها على نفس الحساب وفي نفس الفرع

لكن مثلا لو طلب العميل تحويل من حساب الى حساب آخر

ممكن الحساب الثاني يكون على سيرفر مختلف

طبعا برنامجي غير تجاري وجالس اشتغل عليه في جهاز واحد

لكن بافترض نظريا انه في مثلا حسابين كل واحد على سيرفر لوحده

طبعا السيرفرات عندي اتبعت طريقة انه كل فرع على سيرفر مختلف

نرجع لعملية التحويل

لو مثلا عميل اراد التحويل من حساب الى حساب وكل حساب في فرع مختلف

راح اضطر اسوي قناة اتصال بين السيرفرين

والطريقه االاسلم اللي وجدت عن طريق

UDP

طريقة استخدمها عارفها مشكلتي ما اعرف فين احد الكود

اقصد هل احطها في كلاس لوحدها مع

main

حقتها

والا ممكن بـ

method

وانادي عليها اذا احتجتها

المشكله انه نفس السيرفر ممكن يكون كلاينت وسيرفر بنفس الوقت فلازم احط الارسال والاستقبال

اعيدصياغة السؤال مع توضيح ونظرة اشمل للمشكله

في اول صوره راح تشوفو الكود اللي اسوي فيه الربط حق الـ

corba

وفي هذا الجزء راح انشئ ثلاثة فروع

المفروض كل فرع على سيرفر منفصل

في الصوره الثانيه

المكان اللي انفذ فيه اغلب العمليات مثل السحب والايداع وهذي الكلاس يتم مناداتها في كل مره انشئ فرع جديد

اذا كان ايداع او سحب ماعندي فيه اي مشكله لأنه ما احتاج الا

corba

لكن اذا بحول من حساب لحساب وكل حساب في فرع منفصل لازم اسوي بينهم قناة اتصال

المشكله المواجهتني انه اولا

كل الفروع عندى على

host

واحد

لكن ابغى افرق بينهم عن طريق رقم الفرع بحيث يكون رقم الفرع هو رقم الـ

port

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

UDP

هل بـ

method

زي ما انتم شايفين بالصوره الثانيه

والا بكلاس لوحده

وفرضا انحلت هذي المشكله

كيف اربط كل فرع بالـ

port

حقه

بحيث انه اذا جاه طلب يعرف اي فرع يتنفذ

الصورة الاولى

code2.jpg

الصورة الثانيه

code1.jpg

ادري الكلام حوسه وطويل

ان شاء الله ييسر لنا واحد فاهم ويعطيني هنت او مساعدة ممكن ابنى عليها الحل

مع الشكر الجزيل لأي اضافه مهما كانت

#2

أولا أحيك أخي علي فكرة مشروعك.

بالنسبه لإستخدام ال UDP ‎ ‎فأعبقد أنه يجب عليك استخدام tcp sockets .‎ بدلا منها.

لم لا تستخدم ejb؟ حقيقة، إنها أنسب اداه لمشروعك.

#3

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

اما بالنسبة للفروع الاخرى

بما ان برنامج السيرفر يعمل كعميل و مخدم

اعتقد انه يجب وجود برنامج ثالث يكون هو نقطة التقاء و ربط بين كل الافرع

حيث يتم الترحال و الطلب من خلاله

و اذا طبقت هذه الفكرة اعتقد ان الكود يجب ان يكون في دالة (ميثود)

تحياتي

سؤال بسيط شو اسم المحرر الذي تستخدمه IDE ؟

#4

انتا على ماذا حططت ... Corba ام Socket ...اراك تارة هنا وتارة هناك

اذا كانت مشكلتك في تحديد البوابة التي ستعمل بها على نفس الـ Local Host فأبقا على الـ Corba لانها لا تتطلب منك سوا تحقيق للـ Method البعيدة الخاصة بالــ Client

هل تعمقت في تقنية Corba ؟

#5
{هويدي} كتب:
أولا أحيك أخي علي فكرة مشروعك.

بالنسبه لإستخدام ال UDP ‎ ‎فأعبقد أنه يجب عليك استخدام tcp sockets .‎ بدلا منها.

لم لا تستخدم ejb؟ حقيقة، إنها أنسب اداه لمشروعك.

ياهلا بيك اخي

وعشان اكون صريح وصادق مع نفسي هو

assignment

لكن دسم شوي

وصراحه اضفت الموضوع مش عشان فقط ابحث عن حل وامشى

الفكره انه حبيت احد يشاركني التفكير واستفيد من الاعضاء هنا واقدم اللي اقدر عليه

بخصوص انه ليه ما استخدم

tcp

كلامك سليم هي احسن

لكن مضطر استحدم

udp

كما هو مطلوب في الاسايمنت نفسه لأنه محدد انه يجب استخدم هذي الطريقه

Mohammed Mshari Ersan كتب:
انا برأيي يجب استخدام ال TCP

اما بالنسبة للفروع الاخرى

بما ان برنامج السيرفر يعمل كعميل و مخدم

اعتقد انه يجب وجود برنامج ثالث يكون هو نقطة التقاء و ربط بين كل الافرع

حيث يتم الترحال و الطلب من خلاله

و اذا طبقت هذه الفكرة اعتقد ان الكود يجب ان يكون في دالة (ميثود)

تحياتي

سؤال بسيط شو اسم المحرر الذي تستخدمه IDE ؟

فكره برضوه انه احط برنامج وسيط

بحيث انه يحدد مين المرسل والمستقبل ونوعية البيانات

نوع IDE

IntelliJ IDEA

صراحه انصح فيها كثير

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

#6
shado كتب:

انتا على ماذا حططت ... Corba ام Socket ...اراك تارة هنا وتارة هناك

اذا كانت مشكلتك في تحديد البوابة التي ستعمل بها على نفس الـ Local Host فأبقا على الـ Corba لانها لا تتطلب منك سوا تحقيق للـ Method البعيدة الخاصة بالــ Client

هل تعمقت في تقنية Corba ؟

عشان اوضح لك الصوره

انا عندي نوعين من الاتصال

اتصال من عميل الى سيرفر

وهو اللي فيه العميل يطلب ايداع والا سحب

طريقة التواصل بين العميل والسيرفر هنا

مستخدم

corba

وشغاله مافيها اي مشاكل

في عندي عميله اللي هي

تحويل من حساب لحساب

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

corba

زي ما قلت معرف انترفيس

وفيها الماثودات المطلوبه

والعميل يقدر ينفذها ريموتلي

اول مايصل الطلب للسيرفر

السيرفر هنا لازم يتواصل مع سيرفر ثاني اللي فيه الحساب المراد التحويل له

هنا تخاطب السيرفرين كما هو مطلوب يجب ان يكون عن طريق

udp

التسلسل هو

العميل يرسل رقم الحساب المصدر والهدف مع المبلغ المراد تحويله

اول ماتوصل هذي المعلومات للسيرفر

السيرفر يقوم يخاطب السيرفر الثاني الموجود فيه الحساب الهدف ويطلب منه ايداع المبلغ المحدد

اول ماينجح السيرفر الثاني بالقيام بهذه العميله

يرسل انه تمت بنجاح للسيرفر الاول

بعدين السيرفر الاول يقوم يسوي سحب من الحساب المصدر

لو لاحظت التواصل بين العميل والسيرفر عن طريق

corba

لكن بين السيرفرين

عن طريق

udp

تحيتي

#7

اوكي مع اني لم اقتنع بالفكرة الى الان

ضع الكود لنقوم بالتجريب ونرى اين المشكلة

اراك تسال كثيرا في المواضيع عن طريقة فح اكثر من بوابة ... الموضوع سهل new object from Socket class عند الحاجة

عند الجاجة :P حاس حالي دكتور

#8
اقتباس
اراك تسال كثيرا في المواضيع عن طريقة فح اكثر من بوابة ... الموضوع سهل new object from Socket class عند الحاجة

الطريقة ليست مباشرة ابحث عنها في موقع java2s.com

بما انه سيرة وانفتحت اريد ان اسال خبراء الجافا هل يوجد شئ لدينا بالجافا اسمه multi threaded server يتبع للــ Socket

#9
shado كتب:
اوكي مع اني لم اقتنع بالفكرة الى الان

ضع الكود لنقوم بالتجريب ونرى اين المشكلة

اراك تسال كثيرا في المواضيع عن طريقة فح اكثر من بوابة ... الموضوع سهل new object from Socket class عند الحاجة

عند الجاجة :P حاس حالي دكتور

ما اعتقد سالت كثير :unsure:

هو موضوع واحد وجته يتكلم عن السوكت وقلت اوحد الجهود B)

عموما اعتذر لو حصل هالشئ

راح تجد مع هالرد كافة ملفات المشروع

طبعا هو بدون

gui

مجرد خيارات بسيطه ممكن يختار المستخدم عن طريق اختيار الرقم المناسب

عموما الفكره مو انه برنامج كامل بقدر ماهو التاكد من تطبيق هذي التقنيات بشكل سليم

corba

و

udp

راح تلاقي ثلاث مجلدات

واحد للعميل

والثاني للسيرفر

والثالث مودل عشان الـ

corba

بدايه لازم يتشغل السيرفر

وهو ببساطه يحط كل فرع (فرع بنك) بسيرفر لوحده ويجهزه عشان العميل يقدر يتواصل معه عن طريق الكوربا

طبعا قبل تشغيل السيرفر

لازم تشغل الـ

CORBA naming service

عن طريق امر الدوس

tnameserv -ORBinitialPort 2500

بعدين لازم عشان تنفذ السيرفر لازم تدخل عليه البارمتر هذا

-ORBInitialPort 2500

اذا شغلت السيرفر وصار جاهز

تذهب للعميل وتشغله

ونفس الشي لازم تدخل البارمتر

-ORBInitialPort 2500

بالنسبه للبرنامج الى الان لم اضع

method

للتحويل

ابغى اعرف كيف احول من سيرفر لسيرفر بمعنى من برانش (فرع بنك) الى فرع بنك آخر

عن طريق

udp

بعد ماقريت رد احد الاخوه جالس افكر انه فعلا اخلي كلاس مهمتها الربط بين السيرفرين

صلحت كلاس اسمها

transfer

وباحاول

اسوي

object

من هالكلاس

وفي وقت ما انا اسويه ارسل رقم الفرع بحيث انه بعدين

اذا جيت بارسل من فرع لفرع

استخدم رقم الفرع نفسه كـ

port

بحيث يكون الارسال للفرع المطلوب تحديدا

---------------

tempJAVA.rar

#11

هل لك ان تشرح ما عمل كل method في لغة IDL في ملف Branch

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

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

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

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

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