PDA

View Full Version : گفتگو: تکمیل ساخت یک NetChat



m2011kh
سه شنبه 25 مهر 1391, 01:57 صبح
سلام به دوستان و اساتید عزیز.
من یه نت چت رو امروز نوشتم که فکر کنم کد نویسیم تو نوشتن این برنامه خیلی بد باشه ولی در کل برنامه کار میکنه.
من یه سرور دارم و ده تا کلاینت. تو سرور ده تا وینساک دارم که هر کدوم به ترتیب رو پورت های:
1001
1000
1027
9999
1029
1032
1033
1042
1045
1170
لیستن میکنن.
همه چی طبق برنامه پیش میره و کد ها کار میکنن ولی وقتی بیش از دو کلاینت به سرور مصل میشه خیلی از پیام ها یا نمیرسه یا خیلی دیر میرسه یا ناقص میرسه.
خواستم اگه شما کمک کنین این مشکل رو حل کنم.

m2011kh
چهارشنبه 26 مهر 1391, 19:31 عصر
سلام انگار کسی نمیخواست کمک کنه.نه؟؟؟
کسی نمیخواد همکاری کنه.
ممنون میشم اگه کمک کنین.

m2011kh
جمعه 28 مهر 1391, 18:41 عصر
صد تا بازدید داشت این تایپیک ولی یه نفرم جواب نداد که

saeidpsl
جمعه 28 مهر 1391, 20:40 عصر
نوع سرور شما چی هست ؟

SlowCode
جمعه 28 مهر 1391, 21:02 عصر
سلام دوست عزیز
انتظار داری چه جوابی بهت بدیم؟ آخه با این اطلاعات که چیزی نمیشه فهمید! شاید مشکل از کدت باشه، شایدهای های دیگری هم ممکنه باشه ولی با این اطلاعات نمیتونیم مشکل رو بفهمیم، اگه ممکنه پروژت رو بزار تا بررسی بشه.

m2011kh
شنبه 29 مهر 1391, 22:35 عصر
سلام
پروژه رو ضمیمه کردم.

M.T.P
یک شنبه 30 مهر 1391, 00:30 صبح
کلا روشتون اشتباهه...

برای برنامه نویسی شبکه سرور باید با یک وینساک به یک پورت قایل تنظیم Listen بشه و در عین حال این وینساک بصورت آرایه باشه.
کلاینت ها هم هر چند تعداد که هستن به پورتی که سرور بهش گوش میده همگی وصل میشن.

منتها سرور در هر بار تقاضای اتصال از کلاینت ها یک وینساک جدید از آرایه خودش Load می کنه و اتصال رو Accept می کنه.

اگه باز سوالی بود ، بفرمایید...

m2011kh
یک شنبه 30 مهر 1391, 13:53 عصر
سلام ام تی پی.
از اون روش هم سعی کردم ولی نتوستم اگه میتونین شما بیشتر راهنمایی کنین.
مثلا من برای یه وینسوک این کد هارو برای اتصال چند تا کلاینت به یه وینسوک استفاده زدم.
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
If Client = 0 Then
Client = Client + 1
Load Winsock1(Client)
Winsock1(Client).LocalPort = 1001
Winsock1(Client).Listen
Winsock1(Index).Accept requestID
End If
If Client > 0 Then
Winsock1(Client).Accept requestID
Client = Client + 1
Load Winsock1(Client)
Winsock1(Client).LocalPort = 1001
Winsock1(Client).Listen
End If
End Sub

m2011kh
یک شنبه 30 مهر 1391, 13:54 عصر
ولی برای دریافت دیتا و فرستادن دیتا به همه ی ایندکسای وینسوک چیکار کنم؟؟؟

m2011kh
یک شنبه 30 مهر 1391, 14:42 عصر
ببخشید مشکل قبلی کامل حل شدو برنامه کامل شد برنامه کلانت همون قبلیه که تو پشتای قبلی گذاشتم.
ولی سرورو کلا کداشو عوض کردم.
ببخشید ولی سرور هیچ مشکلی نداره جز اینکه وقتی دکمه Send رو میزنم ولی فقط به یه کلاینت میفرسته.
من سرور جدیدو ضمیمه میکنم.

M.T.P
یک شنبه 30 مهر 1391, 17:08 عصر
این نمونه رو که گذاشتم ببینید.
هر چند تا کلاینت خواستید اجرا کنید بعد از سرور دیتا بهشون ارسال کنید.

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

program2vb
یک شنبه 30 مهر 1391, 17:20 عصر
ببخشید یه سوال هم من داشتم ببخشید میشه با وینساک داخل نت استفاده کرد .. نمیدونم منظورمو فهمیدین یا نه

منظورم شبکه محلی نیس که با Lan وصل میشن

منظورم شبکه اینترنت هست .... مثلا من اینجا و دوستم تو شهر دیگه بتونیم بهم پیام بفرستیم

آیا امکانش هست ؟

موفق و پیروز باشید یاعلی

m2011kh
یک شنبه 30 مهر 1391, 18:35 عصر
آره میشه ویناسک هم میتونی تو شبکه داخلی (lan)استفاده کنی ازش هم شبکه جهانی(net).

m2011kh
یک شنبه 30 مهر 1391, 19:20 عصر
آقای ام تی پی سوری که گذاشتید رو امتحان کردم.
همون مشکلی رو داشت که برنامه خودم داره.
فقط به آخرین کلانتی که متصل شده میفرسته.
لطفا ورژن اصلاح شده رو بزارید تا ما دانلود کنیم.
تو سایت جستجو کردم ولی به اپدیت کامل ویژال بیسیک برخوردم که در وضعیت فعلی با سرعت اینترنت فعلی نمیتونم دانلودش کنم به خاطر حجمش.
و متاسفانه کارمم اجازه نمیده تو یه فرصت مناسب دانلود کنم.
پس اگه بزارید برنامه رو ممنون میشم.

program2vb
یک شنبه 30 مهر 1391, 21:16 عصر
آره میشه ویناسک هم میتونی تو شبکه داخلی (lan)استفاده کنی ازش هم شبکه جهانی(net).

سلام ببخشید میشه یدونه مثال برا نت بزارین ممنون میشم ؟

موفق و پیروز باشید یاعلی

M.T.P
یک شنبه 30 مهر 1391, 21:18 عصر
این ورژن بدون باگش هست.

M.T.P
دوشنبه 01 آبان 1391, 11:26 صبح
سلام ببخشید میشه یدونه مثال برا نت بزارین ممنون میشم ؟

موفق و پیروز باشید یاعلی

سلام مثال خاصی نداره ، شما اگه روی یک IP Valid یک سرور در حالت Listen داشته باشید مثلا به پورت 80 ، با همین روال Connect بهش وصل می شید.

Winsock1.Connect "000,000,000,000", 80
or
Winsock1.Connect "www.yahoo.com", 80

m2011kh
دوشنبه 01 آبان 1391, 15:29 عصر
ممنون داداش ام تی پی مشکل رفع شد.

niko2008
یک شنبه 22 اردیبهشت 1392, 09:07 صبح
ممنون داداش ام تی پی مشکل رفع شد.

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

setroyd
یک شنبه 22 اردیبهشت 1392, 09:45 صبح
چه مشکلی ؟