الشبكة العربية لمطوري الألعاب

موهوب  16mofed84 مشاركة 1

السلام عليكم

شاهدت مواضيع كثيرة لفتح سيرفر باستخدام Socket
الا ان جميع الامثله يتم تجريبها على نفس الحاسوب..اعتقد ان المشكة في الPort Forwarding  لا اعلم شيء في هذا المجال
هل يمكن لاحد ان يعطيني رابط او مساعدة كيف يمكن ذلك على شبكة الانترنت وليس المحليه (ملاحظه : انا لا افهم شيء في  Network)
وشكراً جميعا

مبتدئ  عمر السيد مشاركة 2

لقد قمت تواً بكتابة مقال عن هذا الموضوع. أتمنى أن تجده مفيداً☺
http://nomone.com/blog/?p=72

موهوب  16mofed84 مشاركة 3

مشكور على ردك
قرأت(plain Sockets) لم اجد الجواب الذي ابحث عنه ..
قد تكون صيغه السؤال او(الموضوع) لا توصل للهدف المطلوب
و بصيغه اخرى ماذا يجب علي ان افعله لتحويل مثل هذا (يرسل و يستقبل من نفس الكمبيوتر)
http://codetechnic.blogspot.com/2009/02/receiving-large-files-over-tcpip-in-c.html
الى كمبيوتر الى اخر (في دوله اخرى مثلاً طبعا باستخدام internet )  ؟

انا لدي مودم ADSL و يوجد في داخله Port Forwarding

مبتدئ  عمر السيد مشاركة 4

هذا يعتمد على الهدف من المشروع. إذا كنت تريد حل المشكلة على نطاق صغير، بمعنى أن السيرفر هو جهازك وتحت تصرفك وستخدم عدد محدود من المستخدمين فى نفس الوقت، فالحل الأبسط هو إضافة قاعدة جديدة للراوتر الخاص بالجهاز المستقبل للإتصال (السيرفر). لو كان عندك مودم فقط وليس راوتر، بمعنى أنه لا يستطيع أن يوصل أكثر من جهاز للإنترنت فى نفس الوقت، فلا أظنك بحاجه لعمل أى شئ. فقط شغل برنامج السيرفر على جهازك وأتصل به من الآخر. إذا كان عندك راوتر فأدخل على عنوان الراوتر من المتصفح. غالباً ما سيكون:
192.168.0.1
أو
192.168.1.1
أدخل إسم المستخدم وكلمة السر، غالباً ما سيكونوا
admin
admin
إذهب إلى الخصائص المتقدمة وأبحث عن
NAT
أو
Virtual Server
أو
Port Mapping
مكانها يختلف من راوتر إلى راوتر، فأبحث عن مكانها فى جهازك. من هناك، أدخل قاعدة جديدة. أكتب رقم البورت (9050 فى برنامجك المرفق) وعنوان الجهاز الذى سيستقبله (العنوان المحلى أو الداخلى. غالباً ما سيبدأ بـ 192.168 أو 10.0) وأحفظ التغييرات. يستحسن أن يكون الجهاز الذى سيتقبل الإتصال له عنوان ثابت كى لا تضطر إلى تغيير القاعدة فيما بعد.

فى برنامج المتصل (الكلينت)، بدل العنوان المكتوب بعنوان السيرفر الخارجى (وهذا يختلف عن عنوانه فى الشبكة الداخلية - شبكة المنزل). لمعرفة عنوان السيرفر ، أدخل على
http://www.whatismyip.com/
من على السيرفر. الآن بإمكانك توصيل الجهازين.

ضع فى إعتبارك أن عنوان السيرفر الخارجى قد يتغيير هو الآخر. بإمكانك تثبيته بالإتصال بمزود الخدمة، أو قم بإستخدام dyndns.com أو خدمة مشابهة (يبدو أن dyndns.com لم تعد تعطى حلولاً مجانية)

موهوب  16mofed84 مشاركة 5

وضعت break point  لاعرف الIP
        public void StartListening()
        {
            byte[] bytes = new Byte[1024];
            IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 9050);


هل هذا طبيعي ؟

IPAddress.Any = 0.0.0.0:9050

مبتدئ  عمر السيد مشاركة 6

يا أخى، العنوان الذى تشير إليه هو العنوان الذى تريد أن تستقبل منه، وأصفار تعنى أنك مستعد لتقبل أى إتصال من أى كلينت.
لمعرفة عنوانك المحلى، 
إضغط Start
شغل cmd
أكتب ipconfig
ولمعرفة عنوانك الخارجى، إستخدم www.whatismyip.com

خبير  سلوان الهلالي مشاركة 7

مرحباً،


هنالك عدة مستويات من الحماية او الحواجز التي تقف بينك وبين عالم الانترنت الخارجي، بعض الحواجز هذه قد تكون في نظام التشغيل لديك (الجدار الناري مثلاً) او جهاز الراوتر لديك (بشكل اعتيادي يسمح بمرور البيانات للمنافذ القياسية فقط) وكذلك هنالك NAT والتي تقوم باعطائك عنوان IP لشبكتك الداخلية (مثل 168.0.0.2) لتفصلك وجميع الاجهزة المتصلة لديك عن الشبكة الخارجية المتمثلة بـ IP واحد الحقيقي.. اضافة الى مشكلة ان ال IP الذي تحصل عليه في العادة يكون Dynamic اي كل مرة يجري الاتصال قد تحصل على IP مختلف تماماً، ولكي تكتمل الكعكة فإن معظم مزودي خدمات الانترنت يقومون بحجب مديات معينة من المنافذ...
لكل من هذه المشاكل حلول بالطبع ولكن ليس هنالك حل عملي غير الحصول على اتصال مباشر للانترنت باستخدام IP ثابت بعيد عن جدران الحماية المتعددة، وهذا ما تتمتع به الخوادم التي تقدم الخدمات بكافة اشكالها وهي كما تعلم بلا شك تكلف مبالغ لا يستهان بها للتأجير أو الشراء.


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


اذن فما الحل؟ كل ما نحتاجه هو خادم يمكنه ان يتلقى اتصال من اي جهة بشكل مباشر وبدون حواجز نقوم بتشغيل خادم لعبتنا عليه بطريقة ما، يمكنك ان تستخدم خادم انترنت اعتيادي مثل PHP/MySQL لكن في هذه الحالة ستقتصر عملياتك على طلبات وردود HTTP وهي بطيئة ولا يمكن عملياً استخدامها للالعاب المتعددة اللاعبين التي تعمل في الزمن الحقيقي ولكن قد يمكن استخدامها في الالعاب الاجتماعية البسيطة او خدمات المحادثة وما الى ذلك.
لحسن الحظ لدينا ايضاً انظمة الـ Cloud computing والتي تقدم قوة اكبر وقدرة يمكن باستخدامها انشاء انظمة افضل وكل حسب تقنيته، من الرائع هذه الايام توفر هذه الخدمات بشكل مجاني محدود لكن حدوده كافية بالنسبة للمشاريع الصغيرة، على سبيل المثال هنالك Heroku و Google AppEngine.
اما افضل الحلول فهي تلك الموجهة تحديداً للالعاب، ومن الرائع ايضاً توفرها بشكل مجاني وبحدود معقولة هذه الايام، هذه الحلول توفر امكانات رائعة عالية المستوى مثل قواعد البيانات، نظام مستخدمين، نظام لتنظيم غرف اللعب (player matching) الاتصال مع فيسبوك الخ واستخدم1 شخصياً Player.io وهنالك آخرين.


روابط:
http://www.heroku.com/
https://developers.google.com/appengine/
http://playerio.com/


كما تلاحظ فكل من هذه الحلول يستخدم تقنيات مختلفة جذرياً، لذلك قد تحتاج للبحث قليلاً لكي تجد ما يناسب متطلباتك.

موهوب  16mofed84 مشاركة 8

لا اعلم ما سأقول
مشكورين جميعأ على المعلومات
و شكر خاص للاخ عمر السيد و للاخ سلوان