PDA

View Full Version : سوال: برنامه نویسی شبکه



dracula_killer
یک شنبه 08 بهمن 1391, 21:00 عصر
سلام دوستان

من در حال حاضر دارم برنامه نویسی سوکت تمرین می کنم و برای امتحان یه چت ساده نوشتم
از اونجایی که برنامم دو بخش کلاینت و سرور داره میخوام کلاینت رو در یه کامپیوتر دیگه بذارم و بعد اجرا کنم
تو قسمتی که سوکت نیو می کنم چه آیپی رو باید قرار بدم؟
در زمان تمرین چون هردوش توی یه سیستم اجرا میشد ۱۲۷.۰.۰.۱ میذاشتم
اما الان آیپی سیستم خودم رو چجور بش بدم؟از نظر فایروال و مسائل امنیتی مشکلی پیش نمیاد؟
از اونجایی که همه ی سیستم ها NAT دارن آیپی واقعی سیستم من چیه؟

ممنون میشم پاسخ بدین

spiderman200700
یک شنبه 08 بهمن 1391, 22:28 عصر
سلام.
اگه میخوای توی ارتباط اینترنتی از سوکت استفاده کنی، بیخیالش شو. من یک ساله دنبال راه حلشم. هنوز پیدا نکردم
ارتباط دو تا کامپیوتر که با سوکت میخوان به هم وصل بشن و خط ارتباطیشون هم اینترنت هست، به این سادگیا نیست.(البته تا اونجا که من میدونم)

sina_oonline
دوشنبه 09 بهمن 1391, 01:38 صبح
سلام
یه مقدار بسیار زیادی درد سر داره این موضوع
تا جایی که من یادمه اگر جفت رایانه ها روی یه روتر باشن می تونی پورت های مربوطه رو تو تنظیمات روتر ثبت کنی تا فایر وال بهش گیر نده
البته راه گران تر و بی درد سرش هم طبیعتا خرید یه سرور با ای پی استاتیک هست که دیگه واضحه چه طوری میشه

dracula_killer
دوشنبه 09 بهمن 1391, 10:14 صبح
سلام
یه مقدار بسیار زیادی درد سر داره این موضوع
تا جایی که من یادمه اگر جفت رایانه ها روی یه روتر باشن می تونی پورت های مربوطه رو تو تنظیمات روتر ثبت کنی تا فایر وال بهش گیر نده
البته راه گران تر و بی درد سرش هم طبیعتا خرید یه سرور با ای پی استاتیک هست که دیگه واضحه چه طوری میشه

نه خب من نه اون همه پول دارم و نه میخوام از دو کامپیوتر داخل یک روتر استفاده کنم


سلام.
اگه میخوای توی ارتباط اینترنتی از سوکت استفاده کنی، بیخیالش شو. من یک ساله دنبال راه حلشم. هنوز پیدا نکردم
ارتباط دو تا کامپیوتر که با سوکت میخوان به هم وصل بشن و خط ارتباطیشون هم اینترنت هست، به این سادگیا نیست.(البته تا اونجا که من میدونم)

بالاخره باید راهی باشه.این همه برنامه تحت شبکه با جاوا نوشته شده یک کاری کردن برا حل این مساله
منم دنبال همون کارم!!!

M0TR!X
دوشنبه 09 بهمن 1391, 14:09 عصر
سلام.

به نظر من تنها راه حلش استفاده از vpn باشه ! چون ایپیش استاتیک

dracula_killer
دوشنبه 09 بهمن 1391, 16:07 عصر
سلام.

به نظر من تنها راه حلش استفاده از vpn باشه ! چون ایپیش استاتیک

همه ی وی پی ان ها هم استاتیک نیستن

یک کتاب داشتم می خوندم داشت می گفتم که نرم افزار چت Jabber رو با java نوشتن
خب منطقی نیست که برای هر اکانت jabber یه وی پی ان ساخته شه.حتما یه راهی باید باشه...

spiderman200700
دوشنبه 09 بهمن 1391, 19:03 عصر
اول این تاپیک رو بخون که منظورمو از IP مودم و IP سیستم بدونی:
http://barnamenevis.org/showthread.php?380780-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D8%A7%DB%8C%D9%85%DB%8C%D9%84-%D8%B1%D9%85%D8%A7%D9%86%DB%8C-%DA%A9%D9%87-%D8%A7%DB%8C-%D9%BE%DB%8C-%D8%B9%D9%88%D8%B6-%D9%85%DB%8C%D8%B4%D9%87!&p=1684877&viewfull=1#post1684877

برای ارتباط سوکت دو تا چیز اهمییت داره. IP استاتیک باشه و Valid IP مال سیستمی باشه که برنامه سرور روش اجرا شده، نه مال مودم.

توی اون برنامه هایی که گفتی ، یه سرور تحت وب وجود داره که همه ی کلاینت ها به اون وصل میشن.
سرور IP استاتیک داره و Valid IP مال خود سیستم هست، نه مال مودم.
اگه این شرایط رو بتونی بر قرار کنی میتونی چیزی رو که میخوای بسازی

ولی اگه نتونی سرور تحت وب داشته باشی. اول باید IP استاتیک داشته باشی ، یعدش برای اینکه بتونی از Valid IP مودم بتونی خدمات لازم رو روی پورت مورد نیازت دریافت کنی، باید به تنظیمات مودم یا همون روتر بری ، و از قسمت Port Forwarding پورت مورد نیازت رو بر روی سیستمی که سرور روش هست Forward کنی.

اینجوری میتونی به درخواست هایی که روی پورت مشخص شده ی Valid IP فرستاده میشه گوش بدی.

dracula_killer
دوشنبه 09 بهمن 1391, 20:43 عصر
اول این تاپیک رو بخون که منظورمو از IP مودم و IP سیستم بدونی:
http://barnamenevis.org/showthread.php?380780-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D8%A7%DB%8C%D9%85%DB%8C%D9%84-%D8%B1%D9%85%D8%A7%D9%86%DB%8C-%DA%A9%D9%87-%D8%A7%DB%8C-%D9%BE%DB%8C-%D8%B9%D9%88%D8%B6-%D9%85%DB%8C%D8%B4%D9%87!&p=1684877&viewfull=1#post1684877

برای ارتباط سوکت دو تا چیز اهمییت داره. IP استاتیک باشه و Valid IP مال سیستمی باشه که برنامه سرور روش اجرا شده، نه مال مودم.

توی اون برنامه هایی که گفتی ، یه سرور تحت وب وجود داره که همه ی کلاینت ها به اون وصل میشن.
سرور IP استاتیک داره و Valid IP مال خود سیستم هست، نه مال مودم.
اگه این شرایط رو بتونی بر قرار کنی میتونی چیزی رو که میخوای بسازی

ولی اگه نتونی سرور تحت وب داشته باشی. اول باید IP استاتیک داشته باشی ، یعدش برای اینکه بتونی از Valid IP مودم بتونی خدمات لازم رو روی پورت مورد نیازت دریافت کنی، باید به تنظیمات مودم یا همون روتر بری ، و از قسمت Port Forwarding پورت مورد نیازت رو بر روی سیستمی که سرور روش هست Forward کنی.

اینجوری میتونی به درخواست هایی که روی پورت مشخص شده ی Valid IP فرستاده میشه گوش بدی.

مرسی
حالا یه سوال هست.من می تونم برنامه ی سرور رو تبدیل به applet کنم که تا بتونم اونو تحت وب و در یک هاست آپلود کنم؟
اگر میشه به نظرتون با این کار میشه یه شبه سرور تحت وب تولید کرد؟
اصلا برنامه ی jar کلاینت می تونه با applet سرور با سوکت به راحتی ارتباط برقرار کنه؟

spiderman200700
سه شنبه 10 بهمن 1391, 03:01 صبح
اپلت هم در سمت کاربر اجرا میشه نه در سمت سرور. فقط تفاوت اصلیش اینه که روی مرورگر اجرا میشه.
یعنی فایل های Jar و class مربوط بهش روی سیستم کلاینت بارگزاری میشه و در سیستم اون و در مرورگرش اجرا میشه
شما باید یه وب سرویس ایجاد کنید. با Servlet یا PHP یا ASP یا چیزی شبیه به این.
البته همونطور که گفتم برای راه اندازی سرور به یه IP ثابت و forward کردن پورت مورد نظر از روی روتر به روی سیستم سرور نیاز داری. بقیه ی کارا هم دیگه مثل کار با Localhost هست.

dracula_killer
سه شنبه 10 بهمن 1391, 18:42 عصر
اپلت هم در سمت کاربر اجرا میشه نه در سمت سرور. فقط تفاوت اصلیش اینه که روی مرورگر اجرا میشه.
یعنی فایل های Jar و class مربوط بهش روی سیستم کلاینت بارگزاری میشه و در سیستم اون و در مرورگرش اجرا میشه
شما باید یه وب سرویس ایجاد کنید. با Servlet یا PHP یا ASP یا چیزی شبیه به
البته همونطور که گفتم برای راه اندازی سرور به یه IP ثابت و forward کردن پورت مورد نظر از روی روتر به روی سیستم سرور نیاز داری. بقیه ی کارا هم دیگه مثل کار با Localhost هست.

خیلی ممنون که توضیج میدین
یه سوال دیگه دارم
اگه من برنامه رو تو یه وی پی اس اجرا کنم که Ip استاتیک داشته باشه اون موقع هم مسأله حل نمیشه؟
منظورم برنامه ی سرور هست

spiderman200700
سه شنبه 10 بهمن 1391, 20:40 عصر
خواهش میکنم
راستش نمیدونم سیستم VPS برای تخصیص IP چطوره. ولی فکر کنم اون مشکلی نداشته باشه
شاید دوستان دیگه که تجربه ی عملی با VPS داشتن بتونن توی این زمینه کمکت کنن.

L u k e
چهارشنبه 11 بهمن 1391, 12:52 عصر
:دی

فکر کنم اصولی ترین کار استفاده از یه Database واسط بین Server و Client باشه

dracula_killer
چهارشنبه 11 بهمن 1391, 15:55 عصر
:دی

فکر کنم اصولی ترین کار استفاده از یه Database واسط بین Server و Client باشه

میشه بیشتر توضیح بدی؟چون من نمیخوام اصلا اون پیام ها ذخیره بشه فقط میخوام انتقال داده بشه...

sina_oonline
چهارشنبه 11 بهمن 1391, 17:06 عصر
خیلی ممنون که توضیج میدین
یه سوال دیگه دارم
اگه من برنامه رو تو یه وی پی اس اجرا کنم که Ip استاتیک داشته باشه اون موقع هم مسأله حل نمیشه؟
منظورم برنامه ی سرور هست

سلام
شاید پاسخ بالا که در مورد سرور دادم شما منظور بنده رو سرور اختصاصی برداشت کردین
سرور های مجازی یا vps که ایپی استاتیک بهتون بده ( که هرکی وی پی اس میفروشه میده بای دیفالت) کافیه برای کارتون
در آخرین پروژه ای که بنده توش شرکت داشتم از vps استفاده کردیم و کار شبکه ای هم بود کلا.

در نظر بگیرید دیگه اتصالاتتون مشابه وضعیتی که در عمل شما دارید برای ما توصیف می کنید peer to peer نیست.هر داده ای میره سرور از سرور میره به مقصد

بزارید جمع بندی آنچه شما نیاز دارید را براتون بگم :
یک سرور مجازی بخرید
روش یه اپلیکیشن سرور نصب کنید ( ما چون سکو کارمون j2ee بودش از tomcat استفاده کردیم)
کد سمت سرور را بنویسید
سرور را ران کنید
توصیه می کنم درخواست ها به سرور از روی پورت 80 باشد ( درخواست های set و get معمولی)
کلاینت ها پارامتر های مورد نیاز را به درخواست پس کرده و سرور نیز در جواب تغییرات مورد نیاز را به اطلاع کلاینت می رساند.

اگر سوالی در مورد پیاده سازی دارید در خدمتم
موفق باشید

dracula_killer
چهارشنبه 11 بهمن 1391, 19:14 عصر
سلام
شاید پاسخ بالا که در مورد سرور دادم شما منظور بنده رو سرور اختصاصی برداشت کردین
سرور های مجازی یا vps که ایپی استاتیک بهتون بده ( که هرکی وی پی اس میفروشه میده بای دیفالت) کافیه برای کارتون
در آخرین پروژه ای که بنده توش شرکت داشتم از vps استفاده کردیم و کار شبکه ای هم بود کلا.

در نظر بگیرید دیگه اتصالاتتون مشابه وضعیتی که در عمل شما دارید برای ما توصیف می کنید peer to peer نیست.هر داده ای میره سرور از سرور میره به مقصد

بزارید جمع بندی آنچه شما نیاز دارید را براتون بگم :
یک سرور مجازی بخرید
روش یه اپلیکیشن سرور نصب کنید ( ما چون سکو کارمون j2ee بودش از tomcat استفاده کردیم)
کد سمت سرور را بنویسید
سرور را ران کنید
توصیه می کنم درخواست ها به سرور از روی پورت 80 باشد ( درخواست های set و get معمولی)
کلاینت ها پارامتر های مورد نیاز را به درخواست پس کرده و سرور نیز در جواب تغییرات مورد نیاز را به اطلاع کلاینت می رساند.

اگر سوالی در مورد پیاده سازی دارید در خدمتم
موفق باشید


خیلی خیلی ممنونم از توضیحات کاملتون
چرا نیاز به tomcat هست؟ببینید الان من بخش سرور رو روی کامپیوتر خودم بدون هیچ مشکلی و هیچ نیازی به tomcat اجرا کردم.حتی بخش کلاینت رو هم رو یه کامپیوتر داخل LAN اجرا کردم و جواب گرفتم
میشه در مورد این هم توضیحی بدین؟

sina_oonline
چهارشنبه 11 بهمن 1391, 22:43 عصر
خیلی خیلی ممنونم از توضیحات کاملتون
چرا نیاز به tomcat هست؟ببینید الان من بخش سرور رو روی کامپیوتر خودم بدون هیچ مشکلی و هیچ نیازی به tomcat اجرا کردم.حتی بخش کلاینت رو هم رو یه کامپیوتر داخل LAN اجرا کردم و جواب گرفتم
میشه در مورد این هم توضیحی بدین؟

بدون تام کت هم امکانش هست ولی راهی که من خدمتتون عرض کردم راه بی درد سر تری هست دو تا مثال که خودمون در گیرش بودیم را براتون عرض می کنم
((پروژه ما هرچند بازی نبود مبتنی بر ارتباطات کلاینت سروری بود))
ما از ابتدا به فکر تامکت و وب سروری کردن قضیه نبودیم اما در قسمتی از کار نیاز به این پیدا کردیم که بتونیم بین یک دستگاه گوشی و یک کامپیوتر یک راه ارتباطی بیابیم.((در مثال شما یه نفر رو موبایل بخواد با یه نفر روی پیسی بازی کنه)) بعد ما هم گفتیم این که مشکلی نیست برای کلاینت موبایلم سوکت نوشتیم و ...
تا این جای کار تامکتی هم نبود
می دونید چه اتفاقی افتاد؟
موبایل توانایی وصل شدن به سرور را نداشت و مشکلات عدیده ای در اتصال به سرور براش ایجاد می شد بعد ها فهمیدیم که این گوشی های موبایلی که تو بازار هستند (( و البته شاید هم اپراتور ها - آخرش نفهمیدیم تقصیر اپراتور هاست یا گوشی ها )) تو اتصالات GRRS فقط ریکوئست به پورت http رو ساپورت می کنن نه هر raw socket ای را بنابر این محبور شدیم بریم سمت تامکت یعنی کلا بستر اپلیکیشنمون بشه http request و http response
بلی بدون تامکت (اپپ سرور در مجموع) هم میشه.بنده به عنوان یک best practice برای جلوگیری از مشکلاتی نظیر بالا گفتم ( یعنی خیالتون جمع باشه دیگه درد سر نداشته باشید بعدا large scale شدن برنامتون)
خلاصه این که :اگر نخواهید در بستر وب اجرا کنید نیازی به تامکت هم نخواهید داشت و به صورت عادی پیش می برید.البته باید بتونید شرایط خاص رو هندل کنید مثلا فکر کنید 1000 تیم دو تایی بهتون بگن براشون شرایط بازی را مهیا کنید باید بتونید هر بازی رو مثلا تو دو تا ترد هندل کنید ، به منظور بهینه شدن از ترد پول استفاده کنید و .. ( و همه این کارا را در نسخه web-based تامکت انجام میداده)
همان طوری که در بالا دیدیم من گفتم چون بستر ما j2ee بود تامکت استفاده کردیم چون شما بستری ندارید اپلیکیشن سرورتون میشه همون کد سرور که نوشتید!
موفق باشید

dracula_killer
پنج شنبه 12 بهمن 1391, 01:24 صبح
خیلی خیلی ممنونم
واقعا دکمه ی تشکر واسه مطالبتون کمه