PDA

مشاهده نسخه کامل : راهنمایی درباره برنامه چت p2p بدون سرور در سی شارپ



Code Is Law
27-07-17, 20:26
من که این سوال رو همه جای اینترنت پرسیدم. بذار اینجا هم بپرسم :whistle:

چیزی که میخوام بنویسم یه چیزی شبیه chat هست ولی در عین حال متفات! تفاوتش هم اینه که هیچ سروری وجود نداره (برای همین گفتم p2p).
هر peer توی شبکه فقط IP اونای دیگه رو میدونه و می‌خواد وصل بشه و در عین حال هم یه Socket باز برای گوش کردن به کانکشن‌های ورودی داره.

مشکلم اینجاست که نمیدونم بهترین راحش چیه و اینکه از کجا باید شروع کنم (تازه‌وارد هم هستم در c#)!
مثالهایی هم که پیدا میکنم همشون سرور دارن. یعنی هر client وصل میشه به اون سرور بعد سرور منتقلش میکنه به client دیگه... من اینو نمیخوام.

با SocketAsyncEventArgs و ست فانکشن‌های Async یعنی Send, Receive, Connect,... کار کردم ولی کلی مشکل دارم باهاشون وقتی میرسم به Buffer اینا و قسمت Receive کردن....
الان اینجا گیر کردم.

باز اگه سوالم مفهوم نیست میتونم توضیح بدم. در نهایت هم کد رو روی GitHubام منتشر و Open Source خواهم کرد.

sfmth
27-07-17, 20:33
من که این سوال رو همه جای اینترنت پرسیدم. بذار اینجا هم بپرسم :whistle:

چیزی که میخوام بنویسم یه چیزی شبیه chat هست ولی در عین حال متفات! تفاوتش هم اینه که هیچ سروری وجود نداره (برای همین گفتم p2p).
هر peer توی شبکه فقط IP اونای دیگه رو میدونه و می‌خواد وصل بشه و در عین حال هم یه Socket باز برای گوش کردن به کانکشن‌های ورودی داره.

مشکلم اینجاست که نمیدونم بهترین راحش چیه و اینکه از کجا باید شروع کنم (تازه‌وارد هم هستم در c#)!
مثالهایی هم که پیدا میکنم همشون سرور دارن. یعنی هر client وصل میشه به اون سرور بعد سرور منتقلش میکنه به client دیگه... من اینو نمیخوام.

با SocketAsyncEventArgs و ست فانکشن‌های Async یعنی Send, Receive, Connect,... کار کردم ولی کلی مشکل دارم باهاشون وقتی میرسم به Buffer اینا و قسمت Receive کردن....
الان اینجا گیر کردم.

باز اگه سوالم مفهوم نیست میتونم توضیح بدم. در نهایت هم کد رو روی GitHubام منتشر و Open Source خواهم کرد.اوپن سورس شد منم خبر کنین پروژه ی عالی هست D:

Sent from my SM-J700F using Tapatalk

Code Is Law
27-07-17, 20:36
حالا حالاها کار داره این. :1. (26):

ravegoat
30-07-17, 07:12
من که این سوال رو همه جای اینترنت پرسیدم. بذار اینجا هم بپرسم :whistle:

چیزی که میخوام بنویسم یه چیزی شبیه chat هست ولی در عین حال متفات! تفاوتش هم اینه که هیچ سروری وجود نداره (برای همین گفتم p2p).
هر peer توی شبکه فقط IP اونای دیگه رو میدونه و می‌خواد وصل بشه و در عین حال هم یه Socket باز برای گوش کردن به کانکشن‌های ورودی داره.

مشکلم اینجاست که نمیدونم بهترین راحش چیه و اینکه از کجا باید شروع کنم (تازه‌وارد هم هستم در c#)!
مثالهایی هم که پیدا میکنم همشون سرور دارن. یعنی هر client وصل میشه به اون سرور بعد سرور منتقلش میکنه به client دیگه... من اینو نمیخوام.

با SocketAsyncEventArgs و ست فانکشن‌های Async یعنی Send, Receive, Connect,... کار کردم ولی کلی مشکل دارم باهاشون وقتی میرسم به Buffer اینا و قسمت Receive کردن....
الان اینجا گیر کردم.

باز اگه سوالم مفهوم نیست میتونم توضیح بدم. در نهایت هم کد رو روی GitHubام منتشر و Open Source خواهم کرد.
با سلام،

دوست عزیز به شهر سخت افزار خوش آمدید.

این مثال ها برای شروع می تونه خوب باشه:
Only the registered members can see the link
Peer-to-Peer Chat - Advanced! - C# Tutorials | Dream.In.Code (Only the registered members can see the link)
Only the registered members can see the link
Only the registered members can see the link

اگر با سوکت ها مشکل دارید، مشکل رو دقیقا شرح بدید یا کدی که زدید رو قرار بدید، تا با کمک هم مساله رو بر طرف کنیم.

موفق باشید
آرمین:11():

Code Is Law
30-07-17, 17:37
با تشکر از پاسخت آرمین جان
باید اینا رو تک تک با دقت بعدا مطالعه کنم ولی در نگاه اول:

Only the registered members can see the link
سرور رو جدا از کلاینک کرده..

Peer-to-Peer Chat - Advanced! - C# Tutorials | Dream.In.Code (Only the registered members can see the link)
من فرق UDP و TCp رو دقیقا متوجه نشدم تاحالا ولی با توجه به 1 ذره چیزی که خوندم به گمانم TCP به کار من میاد. پروتوکلی هم براش اینو دارم مینویسم TCP هست.

Only the registered members can see the link
WCF :1. (28):

Only the registered members can see the link
جالبه اینو توی Starهام داشتم و به نظر میاد این دقیقا چیزیه من میخوام :great:




اگر با سوکت ها مشکل دارید، مشکل رو دقیقا شرح بدید یا کدی که زدید رو قرار بدید، تا با کمک هم مساله رو بر طرف کنیم.

توی این چند روز چندتا از مشکلاتم رو حل کردم ولی با مشکلات بیشتری روبرو شدم!

کدم 1 ذره به هم ریختس الان و نیاز به مرتب‌سازی و documentation درست حسابی داره. ولی این خلاصه‌ای از قسمتی که مشکل دارم:
Only the registered members can see the link
سه تا pool دارم که درواقع کلاسی از Stack<SocketAsyncEventArgs> هستن برای 3 تا وظیفه جدا: Accept, Connect, Send&receive
آخری یعنی گرفتن و فرستادن رو با هم با یه SocketAsyncEventArgs (SAEA) انجام میدم که فکر کنم مشکل ازاینجا باشه ولی عجیبه!
توی خط 51 جوابی که میگیرم رو نمیتونم پروسس کنم با MessageManager یا اینکه جواب عجیب غریب میگیرم. منظورم اینه که نصفش از چیزیه که توی Send فرستادم و نصفش چیزیه که Node توی Receive بهم جواب میده!

درضمن با برنامه WireShark چک میکنم چیزی که میفرستم درسته و چیزی هم که میگیرم کاملا درسته ولی توی کد میریزه بهم!

ravegoat
30-07-17, 21:30
دوست گرامی، لطفا پروژه ی کامل رو قرار بدید تا بشه روند اجرا رو بررسی کرد.

اگر اصرار به بهره گیری از مکانیزم های Callbackی دارید این مقاله رو مطالعه بفرمایید:
Only the registered members can see the link

Code Is Law
03-08-17, 15:33
مشکلم رو بالاخره خودم حل کردم به کمک WireShark و بررسی خط به خط چیزایی که میگرفتم.
مشکل توی این تیکه بود: Only the registered members can see the link-sendreceive-cs-L51-L58
اینکه من فرضم بر این بود که توی TCP کل چیزی رو که طرف مقابل میفرسته باید توی یه سری بگیرم. درصورتی که هیچ الزامی نداره!
اتفاقی که میافتاد این بود که من 1 بار بافر رو میگرفتم و میرفتم برای آنالیز میدیدم ناقصه. حالا خط 53 بجای اینکه یهو جواب پسم بده برای آنالیز انجام میده، اگه ناقص بود چیزی که گرفتم میره دوباره StartReceive رو صدا میزنه اگه کامل بود بهم اصلاع میده که StartSend رو انجام بدن :give_rose: