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

كيف أصنع الوكيل من الخادم والعميل

بدأه أبو أنس الدمشقي في 13 ديسمبر 2010 · 2 رد · 946 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم...

لدي برنامجان مكتوبان بلغة السي أحدهما Server والآخر Client وهما يعملان مع بعضهما بشكل جيد.

يستخدمان بروتوكول UDP

في صفحة Terminal في Linux أقوم بكتابة الأمر التالي في شاشة:

./server 8000

والأمر التالي في شاشة أخرى

  ./Client 127.0.0.1 8000

فيقوم العميل بإرسال 100 حزمة إلى الخادم على المنفذ 8000 ويستقبلها الخادم من المنفذ ذاته.

ما أريد أن أعمله هو كتابة برنامج يكون وسيطا (وكيلا) (Proxy) بين الاثنين ...

بحيث يستقبل الحزم من العميل ويرسلها إلى الخادم.

أعلم أنه سيكون برنامجا يجمع الاثنين، وقد فعلت ذلك، لكن المشكلة أن المعطيات Parameters التي تعطى له يجب أن تكون 3 معطيات :

1 ) رقم المنفذ الذي يرسل منه العميل، وهو ذاته الذي يستقبل منه الوكيل.

2) رقم المنفذ الذي يستقبل منه الخادم ، وهو ذاته الذي يرسل منه الوكيل.

3 ) عنوان IP الخاص بالخادم.

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

الخادم والعميل ومحاولتي لكتابة الوكيل في المرفقات .

أرجو أن أجد لديكم إجابة شافية ، فأنا أحتاج لعمل وكيل آخر أيضا ببروتوكول ICMP بعد البحث عن خادم وعميل يستخدمان ICMP.

ملاحظة : أنا أعمل على شبكة افتراضية يقدمها موقع www.planet-lab.org ولي صلاحية تنفيذ الأكواد على عدد من الأجهزة حول العالم.

Proxy.txt

Server.txt

Client.txt

تم تعديل هذه المشاركة بواسطة أبو أنس الدمشقي في 14 ديسمبر 2010 في 16:32

#2

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

للأسف ليس لدي وقت كاف حالياً :(

لو شرحت لنا الخطأ الذي يحصل معك في الـ Proxy بشكل أكبر حتى نستطيع المساعدة بإذن الله.

تحياتي..

#3

شكرا لاهتمامك أخي خالد...

الوكيل من الناحية القواعدية لا إشكال فيه وهو لا يعطي أي خطأ.

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

فهو في نصفه الأول عبارة عن خادم ،ويتوقع منك معطيات الخادم التي هي رقم المنفذ فقط، فلو أعطيته أي شيء آخر سيرد عليك بالسطر التالي:

fprintf(stderr, "Usage: %s <port number>\n", argv[0]);

ثم هو في نصفه الثاني يتحول إلى عميل ، -وقد تأكدت من انه يصل إلى النصف الثاني من خلال طباعة Hello Client Part-.

وإذا صار عميلا صار ينتظر معطيات العميل ، والتي هي رقم الـIP و رقم المنفذ، وأنا قد سبق وأن أعطيته معطيات الخادم بناء على طلبه الأول،لكنه غير رأيه ونفذ السطر التالي

fprintf(stderr, "Usage: %s <destination IP address> <port number>\n", argv[0]);

وكيف أعطيه ما يريد وهو لا يأخذ معطيات إلا في جملة النداء الأولى.

إذن مشكلتي تحديدا هي كيفية إيصال المعطيات الثلاثة مع بعضها إلى الوكيل.

أو إيجاد طريقة تمكنني من إعطاء الوكيل مايريده أثناء التشغيل In run time .

ممتن لاهتمامك رغم ضيق وقتك.

بانتظار الإجابة ممن لديه علم.

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