PDA

View Full Version : socket programming



negin_m
چهارشنبه 24 تیر 1388, 10:47 صبح
من تاحالا با socket programming کارنکردم ولی الان یک پروژه دارم می نویسم که بایدباsocketprogramming کارکنم اگرممکن است هرکس هرمطلب آموزشی دراین زمینه دارد راهنمایی ام کند ترجیحا با توضیحات کامل وفارسی باشد
متشکرم

ASKaffash
چهارشنبه 24 تیر 1388, 11:20 صبح
سلام
این یک نمونه Chat ساده است که از ترکیب Thread و Socket نوشته ام.

m0rteza
چهارشنبه 24 تیر 1388, 13:05 عصر
دوست عزیز اگر میخوای سوکت رو بدون دردسر و کامل یاد بگیری
اول فصل سوکت کتاب دایتل رو بخون . اگر چاپ 4ادیش باشه بهتر ولی بالاتر فرقی نداره

بدش برو کتاب مخصوص سوکت بگیر

mahboube
دوشنبه 13 دی 1389, 09:26 صبح
سلام
این یک نمونه Chat ساده است که از ترکیب Thread و Socket نوشته ام.

سلام
آقاي ASKaffash ميشه يكم در باره برنامت توضيح بدي؟
ازش ميشه توي كامپيوتر هاي شبكه براي CHAT استفاده كرد(بين همه كلاينت ها و سرور)
من با سوكت كار نكردم.
ممنون.

abbas.oveissi
دوشنبه 13 دی 1389, 11:09 صبح
سلام
آقاي ASKaffash ميشه يكم در باره برنامت توضيح بدي؟
ازش ميشه توي كامپيوتر هاي شبكه براي CHAT استفاده كرد(بين همه كلاينت ها و سرور)
من با سوكت كار نكردم.
ممنون.

خودشون جواب بدن بهتره ،اما اینجور که من دیدم فکر کنم فقط با یک کلاینت و یک سرور کار میکنه .

abbas.oveissi
دوشنبه 13 دی 1389, 11:11 صبح
من تاحالا با socket programming کارنکردم ولی الان یک پروژه دارم می نویسم که بایدباsocketprogramming کارکنم اگرممکن است هرکس هرمطلب آموزشی دراین زمینه دارد راهنمایی ام کند ترجیحا با توضیحات کامل وفارسی باشد
متشکرم

به لینک زیر حتما مراحعه کنید،خیلی خوب مفاهیم رو توضیح داده و تهش هم یک مثال داره ( البته مثالش یکم پیچیده هست )

اینجا کلیک کن (http://barnamenevis.org/showthread.php?121111-TCP-IP-Socket-Programming-in-Framework.Net-2.0)

mahboube
دوشنبه 13 دی 1389, 11:35 صبح
من دنبال يه برنامه ساده مي گشتم (كه منم بفهممش!)و اين برنامه خوبيه.اميدوارم بتونم برا چند تا كلاينتم درستش كنم.
با اجازه ASKaffash اگه تونستم كاملترش مي كنم.همينجا مي ذارم.

الان يه سوال دارم.وقتي ip سرور بهش مي دم مشكلي نداره ولي وقتي ip يه كلاينتو بهش ميدم نمي تونه به پورتش(اينجا پورت 13000) وصل شه!چرا؟
اين خطاش:64472

abbas.oveissi
دوشنبه 13 دی 1389, 11:40 صبح
من دنبال يه برنامه ساده مي گشتم (كه منم بفهممش!)و اين برنامه خوبيه.اميدوارم بتونم برا چند تا كلاينتم درستش كنم.
با اجازه ASKaffash اگه تونستم كاملترش مي كنم.همينجا مي ذارم.

الان يه سوال دارم.وقتي ip سرور بهش مي دم مشكلي نداره ولي وقتي ip يه كلاينتو بهش ميدم نمي تونه به پورتش(اينجا پورت 13000) وصل شه!چرا؟

لازم نیس به سرور IP کلاینت بدی،توی سرور همون IP خودش و PORT که میخوای استفاده کنی رو میزنی،بعد توی کلاینت ها IP و PORT سرور رو میدی

mahboube
دوشنبه 13 دی 1389, 11:44 صبح
مشكلي با سرور و كلاينت ندارم.بين دوتا كلاينت؟؟!

abbas.oveissi
دوشنبه 13 دی 1389, 11:46 صبح
مشكلي با سرور و كلاينت ندارم.بين دوتا كلاينت؟؟!

تا اونجایی که من میدونم در برنامه های کلاینت و سرور ، 2 تا کلاینت مستقیم به هم وصل نمیشن،اگر پیامی بخوان به هم بدن،پیام به سرور میره بعد از اونجا به کلاینت که مقصد هست میرسه

mahboube
دوشنبه 13 دی 1389, 11:52 صبح
تو اين برنامه چطوري بايد اينكارو كرد؟
وقتي از سرور براي سيستم خودم ارسال مي كنم(تو برنامه ip سيستم خودم رو براش قرار مي دم)ارسال مي كنه ولي براي سيستم ديگه از شبكه ارسال نمي كنه.ميشه اين پورت اون كامپيوتر بسته باشه مثلا؟!

abbas.oveissi
دوشنبه 13 دی 1389, 12:38 عصر
دوستان این یه برنامه چت خیلی ساده که الان نوشتم،روشی که تو این هست یکم با برنامه ای که دوستمون قرار داده بود فرق داره،میتونید هرکدوم که ساده تر هست ، استفاده کنید . اگر سوالی در مورد این برنامه داشتید بپرسید،در خدمتم:چشمک:

mahboube
دوشنبه 13 دی 1389, 13:03 عصر
دوستان این یه برنامه چت خیلی ساده که الان نوشتم،روشی که تو این هست یکم با برنامه ای که دوستمون قرار داده بود فرق داره،میتونید هرکدوم که ساده تر هست ، استفاده کنید . اگر سوالی در مورد این برنامه داشتید بپرسید،در خدمتم:چشمک:

اجرا نميشه.
ارور:

64476

abbas.oveissi
دوشنبه 13 دی 1389, 13:12 عصر
اجرا نميشه.
ارور:

64476

به جای IP که گذاشتی بذار 127.0.0.1 ببین باز ارور میده،من الان اینو امتحان کردم باید کار کنه

mahboube
دوشنبه 13 دی 1389, 13:19 عصر
برا كدومش؟كلاينت يا سرور؟بعدشم اين IP چيه؟

abbas.oveissi
دوشنبه 13 دی 1389, 13:24 عصر
برا كدومش؟كلاينت يا سرور؟بعدشم اين IP چيه؟
به این IP که بالا گفتم localhost میگن و به کامپیوتر خودت اشاره میکنه . برای جفتشون باید بزنی البته اگه client و server رو روی یک دستگاه اجرا میکنی 127.0.0.1 جواب میده

mahboube
دوشنبه 13 دی 1389, 13:28 عصر
به این IP که بالا گفتم localhost میگن و به کامپیوتر خودت اشاره میکنه . برای جفتشون باید بزنی البته اگه client و server رو روی یک دستگاه اجرا میکنی 127.0.0.1 جواب میده

گذاشتم ولي فرقي نكرد.همون خطا رو ميده؟اين خطا يعني چي؟

abbas.oveissi
دوشنبه 13 دی 1389, 13:35 عصر
گذاشتم ولي فرقي نكرد.همون خطا رو ميده؟اين خطا يعني چي؟

با ویژوال استدیو بازش کن که حداقل مشخص بشه کدوم خط رو ارور میده:متفکر: شاید مشکل از firewall باشه که پورت روبسته،یه بار firewall رو غیر فعال کن ببین کار میکنه یا نه؟؟!

mahboube
دوشنبه 13 دی 1389, 13:51 عصر
با ویژوال استدیو بازش کن که حداقل مشخص بشه کدوم خط رو ارور میده:متفکر: شاید مشکل از firewall باشه که پورت روبسته،یه بار firewall رو غیر فعال کن ببین کار میکنه یا نه؟؟!

آره پورت رو عوض كردم درست شد.

نمي دوني پورتي رو كه firewal بسته چطوري بايد باز كرد؟

abbas.oveissi
دوشنبه 13 دی 1389, 14:00 عصر
آره پورت رو عوض كردم درست شد.

نمي دوني پورتي رو كه firewal بسته چطوري بايد باز كرد؟

اصولا وقتی توی windows firewall settings بری یه بخش داره تو مایه های Exeptions port یا Exeptions اونجا میتونی پورت هایی که میخوای رو بذاری ، تا اینکه firewall اونهارو برات باز بذاره

-----------------------------------------------------------------
برنامه رو بر اساس اون تایپیک که لینکشو گذاشتم درست کردم،اگه اون تایپیک رو بخونی راحت میفهمی چی نوشتم . بعد که مفاهیم رو یاد گرفتی شروع کن به توسعه دادنش

flash118
دوشنبه 13 دی 1389, 14:30 عصر
با نام و یاد خدا سلام
پورتی رو که توسط فایزوال بسته شده می توان با راه حل هایی باز کرد البته به نوع و نحوه بلاک کردن اون پورت هم مربوط می شود اگر بصورت دیفالت توسط خود فایروال ویندوز بسته شده میتونی با استفاده از خود فایروال به لیست استثنا ها ببری و به این ترتییب فایروال در مقابل ارسال دیتا از خودس حساسیت نشان نمی دهد و میتونی به راحتی بگی اون پورت باز شده ولی این کار خطری رو داره که همان بک دور ها هستن که میتواند راهی برای ورود بد افزار ها به سیستم شما باشه چون ما اون پورت رو در حالت استثنا قرار دادیم در هر حال اگه مطلب فوق رو کامل روشن کننده نبود سعی میکنم بعد امتحانات پایان ترم به صورت کلی تر براتون بیان کنم در مورد روش های دیگر هم بحث هایی رو ارائه خواهم کرد امیدوارم تا حدودی با روش کار به صورت عادی آشنا شده باشید موفق باشید

mahboube
دوشنبه 13 دی 1389, 14:58 عصر
اين برنامه ها نسخه كلاينت و سرورشون فرق داره.من ميخام روي سرور وكلاينت يك برنامه نصب كنم.
مثلا اين برنامه:
64483

abbas.oveissi
دوشنبه 13 دی 1389, 15:13 عصر
اين برنامه ها نسخه كلاينت و سرورشون فرق داره.من ميخام روي سرور وكلاينت يك برنامه نصب كنم.
مثلا اين برنامه:
64483

این برنامه که دادی چه جوری کار میکنه،من که هرکاری کردم نشد،بعد این بدرد اینترنت هم میخوره ؟؟ یا فقط روی یه شبکه محلی جواب میده؟

mahboube
دوشنبه 13 دی 1389, 15:37 عصر
این برنامه که دادی چه جوری کار میکنه،من که هرکاری کردم نشد،بعد این بدرد اینترنت هم میخوره ؟؟ یا فقط روی یه شبکه محلی جواب میده؟

من رو شبكه محلي كار كردم.رو هر كامپيوتري مي خواي ازش استفاده كني اجراش مي كني.
باتن advertise رو كه بزني ليست كامپيوتر هاي شبكه رو بهت نشون ميده(كامپيوتري كه تازه وصل ميشه بايد رو بقيه كامژيوتر ها stop كني ودوباره advertise رو بزني).از تو Combobox اسم كامپيوترو انتخاب كن براش پيام بفرست.

abbas.oveissi
دوشنبه 13 دی 1389, 17:46 عصر
اين برنامه ها نسخه كلاينت و سرورشون فرق داره.من ميخام روي سرور وكلاينت يك برنامه نصب كنم.
مثلا اين برنامه:
64483

خب یکی از دوستان آنالیز کنه کد ها رو بیاد بگه از چه روشی کار میکنه ، من خودم امتحان دارم وگرنه اینکارو میکردم :ناراحت:

mahboube
سه شنبه 14 دی 1389, 10:41 صبح
اين برنامه ها همه براي چت بين كلاينت و سرور نوشته شدند.حالا اگر بخوايم براي دوتاكلاينت بنويسيم چه راه هايي داره؟
آيا حتما بايد پيام رو براسرور بفرستيم و از اونجا خودمون به مقصد مورد نظر؟؟
چت روم هاي عادي به چه صورتي عمل ميكنند؟
اگر دوستان كمك كنند اين چت روم هايي كه تو سايت هست رو كامل ترش ميكنيم.
ممنون.

mahboube
سه شنبه 14 دی 1389, 12:22 عصر
اصلا يك سوال ؟براي ايجاد يك چت روم محلي حتما بايد ويندوز سرور داشته باشيم؟

abbas.oveissi
سه شنبه 14 دی 1389, 13:38 عصر
اين برنامه ها همه براي چت بين كلاينت و سرور نوشته شدند.حالا اگر بخوايم براي دوتاكلاينت بنويسيم چه راه هايي داره؟
آيا حتما بايد پيام رو براسرور بفرستيم و از اونجا خودمون به مقصد مورد نظر؟؟
چت روم هاي عادي به چه صورتي عمل ميكنند؟
اگر دوستان كمك كنند اين چت روم هايي كه تو سايت هست رو كامل ترش ميكنيم.
ممنون.

ببین تا اونجایی که من دیشب چک کردم ، برای ارتباط و انتقال اطلاعات توی شبکه و اینترنت از دو روش خیلی استفاده میشه : 1- UDP -2 TCP

که تفاوت هایی با هم دارند . مثلا :
1- در TCP سرعت انتقال داده خیلی پایین تر از UDP هست .
2- در TCP هر داده ای که ارسال میشه، اگه وسط راه مشکلی پیش بیاد به مقصد نرسه،خود TCP دوباره اون رو ارسال میکنه تا اینکه یه بار به مقصد برسه ، اما در UDP احتمالا داره اصلا داده ها به مقصد نرسه .
3- در TCP حتما connection لازم هست و برای اینکار باید یه طرف server بشه و یک طرف client . اما UDP اصلا نیازی به Connection نداره
4- و ...

به علت همین تفاوت های بالا از TCP در جاهایی استفاده میشه که سالم رسیدن داده ها به مقصد برای ما مهم هست اما زمان مطرح نیست مانند دیتابیس و ...
و از UDP هم مثلا در اینترنت برای دیدن فیلم ها استفاده میشه


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

پس با توجه به توضیحات بالا اگر در برنامه از TCP بخوای استفاده کنی ، نمیتونی بین 2 تا کلاینت ارتباط برقراری کنی،چون در TCP حتما باید یک طرف server باشه . اما برای انتقال داده میتونی همون طوری که قبلا گفتم داده رو به server بفرستی بعد server اون رو به کلاینت موردنظر بفرسته .

اما در UDP از هر کامپیوتری در شبکه میتونی به کامپیوتر دیگر هرچی خواستی بفرستی .

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

دارم یه sample هم برای UDP درست میکنم،هر وقت درست شد ، ضمیمه میکنم میذارم اینجا تا دوستان استفاده کنند . :قلب:

mahboube
سه شنبه 14 دی 1389, 14:19 عصر
پس با توجه به توضیحات بالا اگر در برنامه از TCP بخوای استفاده کنی ، نمیتونی بین 2 تا کلاینت ارتباط برقراری کنی،چون در TCP حتما باید یک طرف server باشه . اما برای انتقال داده میتونی همون طوری که قبلا گفتم داده رو به server بفرستی بعد server اون رو به کلاینت موردنظر بفرسته .

اما در UDP از هر کامپیوتری در شبکه میتونی به کامپیوتر دیگر هرچی خواستی بفرستی .
:
يعني حتما بايد ويندوز سرور نصب باشه؟؟!
برنامه ما جاهايي نصب مي شه كه همه xp هستند نمي تونم ازtcp استفاده كنم؟
منم پايم با هم درستش كنيم.فقط مي خوام قبلش مطمئن بشم كه كدوم بهتر براي كار من؟Tcp يا udp.
llk,k.

mahboube
سه شنبه 14 دی 1389, 14:41 عصر
اين يه chatroom كه با Udp نوشته شده ولي فقط با ويندوز سرور اجرا ميشه:
http://www.codeproject.com/KB/IP/ChatAppAsynchUDPSocks.aspx

mahboube
سه شنبه 14 دی 1389, 15:15 عصر
اين يه برنامه ديگس كه نيازي به سرور نداره ولي بادستو net send كار ميكنه.و نمي شه پيامي كه مي فرسته رو توي برنامه دريافت كرد.با message box مياد.
http://www.codeproject.com/KB/menus/MyLanApp.aspx

abbas.oveissi
سه شنبه 14 دی 1389, 15:37 عصر
يعني حتما بايد ويندوز سرور نصب باشه؟؟!
برنامه ما جاهايي نصب مي شه كه همه xp هستند نمي تونم ازtcp استفاده كنم؟
منم پايم با هم درستش كنيم.فقط مي خوام قبلش مطمئن بشم كه كدوم بهتر براي كار من؟Tcp يا udp.
llk,k.

نه اصلا لازم نیس ویندوز server داشته باشی،من امتحان کردم برنامه هامو . منظور این بود یکی از برنامه ها باید به عنوان سرور استفاده بشه و بقیه کلاینت . روی هر دستگاهی میتونی این برنامه هارو اجرا کنی .
من خودم هدفم یه برنامه چت کامل هست حتی با ارتباط تصویری (وبکم) و صدا ، ذره ذره دارم یاد میگیرم که به اون هدفم برسم . برای همین چون برنامه گسترده هست بدم نمیاد همکاری کنیم با هم ، اما من اینور ایران و تو اونور ایران یکم سخته :لبخند:
بعدم من دنباله اینم اگه بشه از مخلوطی از UDP و TCP استفاده کنم،مثلا در ارتباط های تصویری از UDP استفاده کنم در ارسال متون از TCP

abbas.oveissi
سه شنبه 14 دی 1389, 15:41 عصر
اين يه برنامه ديگس كه نيازي به سرور نداره ولي بادستو net send كار ميكنه.و نمي شه پيامي كه مي فرسته رو توي برنامه دريافت كرد.با message box مياد.
http://www.codeproject.com/KB/menus/MyLanApp.aspx

با این هم در یکی از تایپیک های همین فروم برخورد کردم،یکی سوال داشت : " آیا میشه به جای اینکه پیام در message box بیاد ،اون رو توی برنامه خودمون بیاریم؟"
من روی این قضیه هم یه تحقیق کردم و نتیجه ای که بدست آوردم این بود که چیز بدرد بخوری نیس و نمیشه اصلا اون رو توی برنامه استفاده کرد،و فقط توی message box میاره پیام رو که اینم اصلا بدرد نمیخوره

mahboube
سه شنبه 14 دی 1389, 15:49 عصر
نه اصلا لازم نیس ویندوز server داشته باشی،من امتحان کردم برنامه هامو . منظور این بود یکی از برنامه ها باید به عنوان سرور استفاده بشه و بقیه کلاینت . روی هر دستگاهی میتونی این برنامه هارو اجرا کنی .
من خودم هدفم یه برنامه چت کامل هست حتی با ارتباط تصویری (وبکم) و صدا ، ذره ذره دارم یاد میگیرم که به اون هدفم برسم . برای همین چون برنامه گسترده هست بدم نمیاد همکاری کنیم با هم ، اما من اینور ایران و تو اونور ایران یکم سخته :لبخند:
بعدم من دنباله اینم اگه بشه از مخلوطی از UDP و TCP استفاده کنم،مثلا در ارتباط های تصویری از UDP استفاده کنم در ارسال متون از TCP

از اين برنامه هايي كه اينجا گذاشتم و هست كدوم روي دوتا كلاينت جواب ميده؟؟(من تو شبكم يه ويندوز سرور هم دارم)

abbas.oveissi
سه شنبه 14 دی 1389, 15:58 عصر
از اين برنامه هايي كه اينجا گذاشتم و هست كدوم روي دوتا كلاينت جواب ميده؟؟(من تو شبكم يه ويندوز سرور هم دارم)

من اینجا شبکه ندارم که امتحان کنم،من برنامه هامو یا روی یک کامپیوتر امتحان میکنم یا از طریق اینترنت با یکی دیگه،همشون هم کار میکنه

abbas.oveissi
سه شنبه 14 دی 1389, 18:24 عصر
سلام دوستان ، یه برنامه چت بر روی شبکه محلی نوشتم . از UDP استفاده کردم توو این برنامه ، به همین دلیل فقط یه فایل هست،روی کامپیوتر های شبکه نصب کنیدشون و باهاش چت کنید . هرکی هم پیام بده IP دستگاهشون رو نمایش میده تا بفهمید کی بهتون پیام داده .

1- اگه دیدید کار نکرد ، پورت 12345 دستگاهتون رو باز کنید
2- خود برنامه باید IP های دستگاههای شبکه رو توی combobox نمایش بده،اما اگه نشون نداد،دستی بزنید

سوالی بود در خدمتم :لبخندساده:

mahboube
چهارشنبه 15 دی 1389, 10:14 صبح
سلام دوستان ، یه برنامه چت بر روی شبکه محلی نوشتم . از UDP استفاده کردم توو این برنامه ، به همین دلیل فقط یه فایل هست،روی کامپیوتر های شبکه نصب کنیدشون و باهاش چت کنید . هرکی هم پیام بده IP دستگاهشون رو نمایش میده تا بفهمید کی بهتون پیام داده .

1- اگه دیدید کار نکرد ، پورت 12345 دستگاهتون رو باز کنید
2- خود برنامه باید IP های دستگاههای شبکه رو توی combobox نمایش بده،اما اگه نشون نداد،دستی بزنید

سوالی بود در خدمتم :لبخندساده:
من توي يه شبكه بدون ويندوز سرور امتحان كردم من حل شد.
البته مشكل من با برنامه ها به خاطر اين بود كه آنتي ويروسم يك سري تنظيمات انجام داده بود ولي نفهميدم دليلش تنظيمات ويندوز سرور بود يا تنظيمات آنتي ويروس.
برنامه شما هم جواب ميده ولي يه مشكل داره اونم اينه كه وقتي برنامه رو ببندي و بخواي دوباره باز كني ميگه اين سوكت داره استفاده ميشه.
كه بيشتر برنامه هايي كه من دارم اين مشكلو دارن.چطوري ميشه حلش كرد؟
ممنون.

masoudmmd
چهارشنبه 15 دی 1389, 11:13 صبح
کمککککککککککککککککککککککک ککککککک دوستان پر توان برسید به داد این ناتوان

من یه برنامه دارم که توش یه فایل exe دیگه رو که اون هم یه برنامه #C هست رو به تعداد دلخواه صدا میزنه و اجرا میکنه . به این صورت که برنامه اصلی رو مادر یا سرور و ریز برنامه ها رو فرزندان یا کلاینت فرض کنید .
حالا من میخوام از مادر با سوکت اطلاعات به فرزندا انتقال بدم ولی نه اینکه همزمان به همه فرزندا . میخوام اطلاعات رو روی پورت بزارم و هر فرزندی که اول به پورت سر زد اون برداره و مادر هم همزمان پورت رو چک کنه که اگه خالی بود یه اطلاعات دیگه روش بزاره که فرزند بعدی بیاد و برداره و به همین صورت تا انتها.

mahboube
چهارشنبه 15 دی 1389, 11:52 صبح
يه مشكل وجود داره اونم اينكه برنامه كه بسته ميشه فايل exe ش هنوز توي taskmanager هست.برا همين نميشه دوباره بازش كرد.ميگه اين سوكت داره استفاده ميشه.
چرا از تو Taskmanager برداشته نميشه.
من thread رو هم abort مي كنم و سوكت رو close.
اينم تسك منيجر و اررور:
6457164572
http://barnamenevis.org/images/misc/pencil.png

masoudmmd
چهارشنبه 15 دی 1389, 12:10 عصر
آره . منم همین مشکل رو دارم . کاش یکی کمک کنه .

mahboube
چهارشنبه 15 دی 1389, 14:24 عصر
دوست عزيز براي اين برنامه مشكل اين بود كه ترد از بين نمي رفت بنابراين برنامه بسته نميشد و اگر مي خواستيم دوباره اجراش كنيم ميگفت سوكت درحال استفاده است ، كه براي حل كردنش بايد توي close فرم ترد رو abort مي كرديم.
اللبته قبل از start كردن ترد بايد حتماisbackground ش رو True مي كرديم.
اميدوارم مشكل شمارو هم حل كنه.

mahboube
چهارشنبه 15 دی 1389, 15:51 عصر
دوست عزيز آقاي abbas.ovaessi اين برنامت خوبه ولي بيا كاملترش كنيم:(چون من هربرنامه چتي گرفتم مشكل داشت!!).

يكي از مشكلات اين بود كه با بستن برنامه تردتو abort نمي كردي كه خيلي واجبه.

1-به جاي ip بايد اسم كامپيوترهاي شبكه رو بزنه(ضمنا الانم فقط Ip كامپيوتري كه روش اجرا ميشه رو ميزنه) كه من دارم اينو درست مي كنم.ميزارمش.

2-من روي دوتا كامپيوتر اجراش ميكنم روي يكي از كامپيوتر ها حتما بايد يك پيام فرستاده شه تابتونه پياما رو دريافت كنه.كه هنوز نميدونم براچيه؟!

3-اگر بتونيم بعدا يه حالت offline ساده هم براش بزاريم ok ميشه.كه من اطلاعي درموردش ندارم.

مرسي كه برنامتو share كردي.

abbas.oveissi
چهارشنبه 15 دی 1389, 21:50 عصر
دوست عزيز آقاي abbas.ovaessi اين برنامت خوبه ولي بيا كاملترش كنيم:(چون من هربرنامه چتي گرفتم مشكل داشت!!).

يكي از مشكلات اين بود كه با بستن برنامه تردتو abort نمي كردي كه خيلي واجبه.

1-به جاي ip بايد اسم كامپيوترهاي شبكه رو بزنه(ضمنا الانم فقط Ip كامپيوتري كه روش اجرا ميشه رو ميزنه) كه من دارم اينو درست مي كنم.ميزارمش.

2-من روي دوتا كامپيوتر اجراش ميكنم روي يكي از كامپيوتر ها حتما بايد يك پيام فرستاده شه تابتونه پياما رو دريافت كنه.كه هنوز نميدونم براچيه؟!

3-اگر بتونيم بعدا يه حالت offline ساده هم براش بزاريم ok ميشه.كه من اطلاعي درموردش ندارم.

مرسي كه برنامتو share كردي.

اااا چه خوب شد گفتی،من اصلا اینو نمیدونستم که ترد ها با بسته شدن برنامه تموم نمیشن ، تذکر به جایی بود .

جواب مورد هایی که ذکر کردید :

1- من چون شبکه ندارم نمیتونم یه سری از کد ها رو چک کنم،مثلا این مورد حتما باید روی شبکه چک بشه ، شما زحمتشو بکش ، ممنون

2- من نفهمیدم منظورتون چی بود،یعنی اگه یکی برنامه رو اجرا میکنه،تا اولین پیام رو نفرسته ، هیچ پیامی دریافت نمیکنه ؟؟

3- این قضیه که رو فکر نکنم بشه عملی کرد،چون باید یه سروری باشه که همیشه فعال باشه تا بتونه پیام ها رو توی خودش ذخیره کنه،بعدا به دستگاه مقصد بفرسته .

bpzone
پنج شنبه 16 دی 1389, 08:50 صبح
1- من چون شبکه ندارم نمیتونم یه سری از کد ها رو چک کنم،مثلا این مورد حتما باید روی شبکه چک بشه ، شما زحمتشو بکش ، ممنون



دوست عزیز، شما نیاز نداری تا حتماً یک شبکه فیزیکی داشته باشی تا برنامه رو چک کنی
می تونی با استفاده ار نرم افزار VMware روی سیستم خودت چندتا OS دیگه نصب کنی و یک شبکه به صورت مجازی داشته باشی
موفق باشی

mahboube
پنج شنبه 16 دی 1389, 10:29 صبح
من اين برنامه دوستمون رو يكم كاملترش كردم.ممنون ميشم اگر دوستاني كه به شبكه دسترسي دارند اجراش بكنند و مشكلاتش را بگويند.

من تو شبكه وارد نيستم و فكر ميكنم ممكنه يه جاهايي آنتي ويروس يا firewall تنظيماتي انجام داده باشه و يا مثلاdns نصب نباشه و از اين دست صحبتها.
خيلي خوب ميشه اگر دوستاني كه دانش شبكه دارند كمك كنند اين برنامه رو كامل كنيم.
متشكرم.
64614

mahboube
پنج شنبه 16 دی 1389, 10:31 صبح
من توي پروژه بالا از يك كلاس استفاده كردم(از كد پروجكت) كه با استفاده از تابع NetServerEnum از "Netapi32" كامپيوتر هاي موجود روي يم workgroup رو نمايش ميده.اگر دوستان كد بهتري دارند كه همه ورك گروپ ها رو نمايش بده ممنون ميشم بزاره.

بعد يك سوال ديگه ما تو اين برنامه از كلاس udpclient استفاده ميكنيم.با توابع همين كلاس ميشه فهميد پيامي كه ارسال شده به مقصد رسيده يانه ؟؟
http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.aspx
ممنون.

mahboube
پنج شنبه 16 دی 1389, 11:00 صبح
بعد يه سوال ديگه،اگر من بخوام ازدوتاسوكت يكي براي Send‌ ويكي براي Recive استفاده كنم،چطوري بايد عمل كنم؟
چون وقتي از يك سوكت استفاده مي كنيم نميشه همزمان دوتاكامپيوتر ديتا بفرستند؟!

abbas.oveissi
پنج شنبه 16 دی 1389, 11:51 صبح
دوست عزیز، شما نیاز نداری تا حتماً یک شبکه فیزیکی داشته باشی تا برنامه رو چک کنی
می تونی با استفاده ار نرم افزار VMware روی سیستم خودت چندتا OS دیگه نصب کنی و یک شبکه به صورت مجازی داشته باشی
موفق باشی

نه دستت درد نکنه اصلا خوشم نمیاد از این کار :لبخند: دستگاهم همینجوری هم با خودش درگیره :لبخند:



بعد يه سوال ديگه،اگر من بخوام ازدوتاسوكت يكي براي Send‌ ويكي براي Recive استفاده كنم،چطوري بايد عمل كنم؟
چون وقتي از يك سوكت استفاده مي كنيم نميشه همزمان دوتاكامپيوتر ديتا بفرستند؟!

مگه الان این برنامه که من دادم بهت ،همزمان دریافت و ارسال نمیکنه ؟؟؟؟

mahboube
شنبه 18 دی 1389, 10:15 صبح
سلام
من ميخوام send و recive رو توي يك فرم انجام بدم.(با استفاده از كداي همين برنامه دوستمون)
دارم از tcpclient استفده ميكنم.ولي چون براي send‌وrecive از يك سوكت استفاده ميشه.مشكل دارم.
دوستان هركي ميدونه اگر ممكنه يه نگاه به اين پروژه بندازه.ممنون.
64706

mahboube
شنبه 18 دی 1389, 14:18 عصر
مشكل به خاطر سوكت ها نيست.به خاطر thread .
اين برنامش،من كه نفهميدم!!!

اصلا متدي كه قراره مقدارو بريزه اجرا نميكنه.

abbas.oveissi
شنبه 18 دی 1389, 14:20 عصر
مشكل به خاطر سوكت ها نيست.به خاطر thread .
من با invoke هم مقدار دريافتيم رو توي textbox ام ميريزم ولي بازم حل نميشه.خطاهم نميده فقط هنگ ميكنه.
براچيه؟!

خط به خط اجرا کن ببین چرا اینجور میشه خب،اینجوری میفهمی چرا قفل میکنه

mahboube
شنبه 18 دی 1389, 14:35 عصر
خط به خط اجرا کن ببین چرا اینجور میشه خب،اینجوری میفهمی چرا قفل میکنه

تا اينجاشو بلدم برادر!!
مساله اينجاس كه من ازاين تردا خوشم نمياد!نميفهمم سيستمشونو.خيلي آب زير كاهن:خجالت:!!
برنامشم توپست قبل گذاشتم.قربونت يه نگاه بنداز.

mahboube
شنبه 18 دی 1389, 16:00 عصر
:تشویق::تشویق:
آفرين به خودم.
درست شد:
اين خطو اشتباه مي نوشتم:


textBox1.BeginInvoke(newwrite_Recive_Delegate(writ e_msg_to_textbox), newobject[] { GMsg });

powerboy2988
چهارشنبه 22 دی 1389, 20:49 عصر
دوستان این یه برنامه چت خیلی ساده که الان نوشتم،روشی که تو این هست یکم با برنامه ای که دوستمون قرار داده بود فرق داره،میتونید هرکدوم که ساده تر هست ، استفاده کنید . اگر سوالی در مورد این برنامه داشتید بپرسید،در خدمتم:چشمک:


سلام

بابته برنامه ممنون....
من یکم تغییرات توش دادم و اینکه واسه جفتشون send و receive گذاشتم... اما بعد از پایان اولین interval اون timer که گذاشتی.. برنامه هنگ می کنه ... و دیگه نمی تونند واسه هم چیزی بفرستند...

به نظرت مشکل از کجاست؟

این سورس و برنامه :



using System;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;

namespace server_sample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

IPAddress ip;
IPEndPoint IpPort;
Socket main_socket,client;
public AsyncCallback pfnWorkerCallBack;
int size = 0;
private void button1_Click(object sender, EventArgs e)
{
String ipName, portName;
ipName = txtIp.Text.Trim();
portName = txtPort.Text.Trim();


button1.Enabled = false;
ip = IPAddress.Parse(ipName); //IP server ro midiim
try
{
if (ip != null && portName != null)
IpPort = new IPEndPoint(ip, Convert.ToInt32(portName)); //port ii ro ke mikhaim estefade koniim midim
main_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // yek socket ro misazim
main_socket.Bind(IpPort); //socket ro be IP va Port vasl mikonim
main_socket.Listen(int.MaxValue);
client = main_socket.Accept(); //montazer mishe barname ta yek client behesh vasl beshe
label2.Text = "Connected.......";
button2.Enabled = true;
timer1.Enabled = true;

}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());

}
}

private void button2_Click(object sender, EventArgs e)
{
try
{
byte[] msg = new byte[60000];
msg = Encoding.UTF8.GetBytes(txtSend.Text);
client.Send(msg);
msg = null;
timer1.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
throw;
}
}

private void timer1_Tick(object sender, EventArgs e)
{
byte[] msg = new byte[256];
for (int i = 0; i < msg.Length; i++)
{
msg[i] = 0;
}

try
{
size = client.Receive(msg);
if (size != 0)
{
txtRecieve.Text = txtRecieve.Text + System.Text.Encoding.ASCII.GetString(msg) + '\n';
}
timer1.Enabled = false;
Thread.Sleep(3000);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());

}finally
{
timer1.Enabled = false;
}


}


}
}

abbas.oveissi
پنج شنبه 23 دی 1389, 00:19 صبح
سلام

بابته برنامه ممنون....
من یکم تغییرات توش دادم و اینکه واسه جفتشون send و receive گذاشتم... اما بعد از پایان اولین interval اون timer که گذاشتی.. برنامه هنگ می کنه ... و دیگه نمی تونند واسه هم چیزی بفرستند...

به نظرت مشکل از کجاست؟

این سورس و برنامه :

[coe]
using System;
using System.Tex
[/code]

منم نتونستم از تایمر استفاده کنم،همش هنگ میکنه،اگر میخوای برنامه قشنگ کار کنه،از thread ها استفاده کنید

powerboy2988
پنج شنبه 23 دی 1389, 19:24 عصر
منم نتونستم از تایمر استفاده کنم،همش هنگ میکنه،اگر میخوای برنامه قشنگ کار کنه،از thread ها استفاده کنید

آره .. حالا با thread نوشتمش کار کرد...


using System;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;

namespace server_sample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

IPAddress ip;
IPEndPoint IpPort;
Socket main_socket,client;
int size = 0;
byte[] msg = new byte[60000];
private void button1_Click(object sender, EventArgs e)
{
String ipName, portName;
ipName = txtIp.Text.Trim();
portName = txtPort.Text.Trim();


button1.Enabled = false;
ip = IPAddress.Parse(ipName); //IP server ro midiim
try
{
if (ip != null && portName != null)
IpPort = new IPEndPoint(ip, Convert.ToInt32(portName)); //port ii ro ke mikhaim estefade koniim midim
main_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // yek socket ro misazim
main_socket.Bind(IpPort); //socket ro be IP va Port vasl mikonim
main_socket.Listen(int.MaxValue);
client = main_socket.Accept(); //montazer mishe barname ta yek client behesh vasl beshe
label2.Text = "Connected.......";
button2.Enabled = true;
Thread thread = new Thread(new ThreadStart(getMessage));
thread.Start();

timer1.Enabled = true;

}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());

}
}

private void button2_Click(object sender, EventArgs e)
{
try
{
byte[] msg1 = new byte[60000];
msg1 = Encoding.UTF8.GetBytes(txtSend.Text);
client.Send(msg1);
msg1 = null;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}



private void getMessage()
{
try
{
while (true)
{

size = client.Receive(msg);
}

}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());

}
}

private void timer1_Tick(object sender, EventArgs e)
{
if (size != 0)
{
txtRecieve.Text = txtRecieve.Text + System.Text.Encoding.ASCII.GetString(msg) + '\n';
}
size = 0;
}
}
}

mgmgmg
دوشنبه 09 خرداد 1390, 15:41 عصر
دوستان این یه برنامه چت خیلی ساده که الان نوشتم،روشی که تو این هست یکم با برنامه ای که دوستمون قرار داده بود فرق داره،میتونید هرکدوم که ساده تر هست ، استفاده کنید . اگر سوالی در مورد این برنامه داشتید بپرسید،در خدمتم:چشمک:

من تاحالا با socket programming کارنکردم وقتی این برنامه رو هم اجرا میکنم از این خط ارورر میگره ;( socket.Connect(IpPort
اگه یکی بتونه درموزد این ادرس پورت برام توضیح بده ممنون میشم تو قسمت windows firewall settings ادرس پورت تو برنامه رو هم add کردم ولی name porto یه چیزه همینجوری زدم
ip clint & serveram گزاشتم 127.0.0.1 میخواستم بدونم باید ip کامپیوترم عوض کنم؟
یکی help کنه صواب داره