عند عمل ربط بين جهازين بواسطه بروتكول TCP المشكلة كيف احصل على الIP لكل جهاز خلال الانترنت ؟

السلام عليكم

مشكلتي هي قمت ببرمجة برنامج Chat بين جهازين ويتم وضع ال IP للطرف المرسل له وفي الشبكة المنزلية يكون سهل الحصول على الIP ويكون عبارة عن 192.168.1.22 وهكذا ولكن عند ربط البرنامج بين جهازين من خلال الانترنت يكون ال IP غير حقيقي فكيف يمكنني بهذه الحالة الارسال والاستقبال , ما هو الIP الذي سوف ارسل له للطرف الاخر في هذه الحالة ؟؟؟

مع العلم استخد VB.NET في برمجني وبروتكول TCP


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

ولكن دعنا نتفق علي بعض الامور الرئيسية والمهمة :

اولا : كنقطة اساسية هنا انه في برامج الدردشة عامة وبدون استثناء الايبي الداخلي أمثال 192.168.1.2 ليس له اي دور او اي لزوم في عمل المنظومة اطلاقا .

ثانيا : الخادم يجب ان يكون معلوم العنوان والمنفذ .

ثالثا : لا تحتاج لعمل اي تعديلات او اعدادت خاصة علي الراوتر فهذا البروتكوول يدعم التوجيه التقائي فيمكن له العمل من خلف الراوتر .

نأتي لنقطة مهمة جدا وهو كيف يعمل بروتوكول Tcp/ip .

بخلاف باقي البروتوكلات البرتوكول tcp/ip سهل نوعا ما وهو مثالي لمنظومات الدردشة النصية ونقل الملفات وما دون ذلك تحتاج لبروتوكل اخر في حال نقل الصوت والصورة ولهذه المهمة يوجد بوتوكول rtp يدمج خواص البروتوكولين udp و tcp سناتي علي الفرق بينهما في اخر المقال .

من الامور البديهية هنا انه في هذا البروتوكول tcp يجب ان يكون هناك عميل وخادم (كلاينت /سيرفر) عملية الاتصال تكون بناء علي طلب من العميل للخادم علي عنوان الخادم الايبي والمنفذ (البورت) يصل الطلب الي السيرفر ويقوم بعمل قبول ثم يعود للعميل بعلامة انه تم قبول اتصال في هذه الحالة العميل يعلم من خلال حدث الاتصال انه تمت عملية الاتصال .

لحد هنا الامور طبيعبية وعادية نوعا ما ولكن ماذا تعني انه تم الاتصال بين العمل والخادم وماذا اصبح لدينا بعد عملية الاتصال وكيف سيتم تبادل الرسائل وكيف نستطيع تحديد مستخدم ما لارسال رسالة له والكثير من الاسئلة التي تخص هكذا منظومة واليك بعض الحلول .

عند بناء اتصال بين العميل والخادم ينشأ ما يسمي قناة الاتصال Channel وكل عميل يتصل بالخادم ينشئ قناه اتصال به ولا يمكن ان يشترك اثنين في هذه القناة ، في جهة الخادم يتم حفظ قنوات الاتصال في قائمة خاصة لنسمها Connected Users من خلال هذه القائمة يتم السيطرة والتحكم في كل العملاء المتصلين بالخادم والقناه ببساطة عبارة عنصر من نوع ClientTcp يتم انشائه لحظة الاتصال بالخادم ويكون علي ااتصال مباشر مع العميل بعد عملية قبول الاتصال .

الان كيف لنا تحديد مستخدم ما في هذه القائمة :

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

بعد هذه المرحلة نستطيع ان نقول انه هناك اتصال كامل بين العميل والخادم ومن الممكن بعد هذه المرحلة ان يتم ارسال قائمة العملاء ببيانتهم لكل عميل جديد يتصل بالخادم ، حتي يكون هناك منطق في عملية الدردشة فلا يمكن لعميل الحديث مع عميل اخر دون ان يعرف انه موجود او ما هو معرفه .

هذه المرحلة الاولي والمهمة في منظومة برمجة الدردشة بما اني مبرمج دلفي فطريقة انشاء الخادم تختلف قليلا عنها في دوت نت ولكن المنطق واحد بالتأكيد .

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

شكرا جزيلا لك على الشرح الاكثر من رائع وبإنتظار الامثلة ان شاءالله .