View Full Version : راهنمایی درباره برنامه چت تحت شبکه با winsock
shahram_g
جمعه 12 دی 1393, 15:49 عصر
درود
با کامپوننت winsock دارم یک برنامه چت آنلاین تحت شبکه می نویسم که بیش از 1000 تا کاربر داره.
برای برقراری ارتباط تک نفره یک فرم طراحی کردم.حالا فرض کنید این فرد بخواد همزمان با چند نفر دیگه گفتگو کنه به صورت خصوصی .
ایا باید از فرم طراحی شده کپی و استفاده کنم ؟ مثلا 20 تا فرم از همین فرمی که ساختم داشته باشم تا برای صحبت با هر نفر یکی از این فرمها رو فراخوانی کنم یا راه بهتری سراغ دارید؟
سپاس
vbhamed
شنبه 13 دی 1393, 09:41 صبح
سلام
نياز به چند تا فرم نيست، همون فرمتون بايد به صورت دايناميك ايجاد بشه و پارامترهاي مختلفي مثل نام كاربر و ساير اطلاعات لازم رو به صورت پارامتر بگيره و مديريت كنه
اما بحث اصلي اينه كه نوشتن يك برنامه چت 1000 نفره به اين راحتي ها هم نيست، همون مشكل ترافيك ايجاد شده و پاسخگو بودن سرور رو بخواين حل كنين خودش كلي كار داره و نياز به سخت افزار قدرتمند سرور و رم بالا و ... داريد
بهتره اول روي تعداد خيلي كمتري تمركز كنيد
shahram_g
شنبه 13 دی 1393, 18:56 عصر
سپاس از شما.
فعلا دارم برای حدود 40 نفر می نویسم ببینم نتیجه چی میشه.
اون موردی هم که نوشتید کمک بزرگی بود.
فقط یه سوال:
آیا در برنامه server نیاز هست که یک آرایه 40 تایی winsock روی فرم قرار بدم؟
اگه نفرات زیاد شد که این روش خیلی سخت میشه.
vbhamed
یک شنبه 14 دی 1393, 06:28 صبح
سلام
به نظر من آرايه نميخواد، سرور يك عدد winsock داره و همه به همون كانكت ميشن وقتي كسي پيامي ميفرسته بايد نام كاربري فرستنده و گيرنده رو هم براي سرور بفرسته و سرور با توجه به اونها پيامها رو تقسيم ميكنه
ضمنا به يك نكته مهم توجه كنيد، براي كار با Winsock در بستر اينترنت بايد آي پي استاتيك داشته باشيد در صورتيكه تقريبا تمام آي اس پي ها به كاربران آي پي دايناميك ميدن و كاربران بايد آي پي استاتيك رو به صورت ماهانه اجاره كنند و اين يعني برنامه شما اكثر جاها كار نميكنه ولي در مورد شبكه داخلي (LAN) مشكلي وجود نداره
shahram_g
یک شنبه 14 دی 1393, 09:24 صبح
شبکه داخلی هست و مشکلی از بابت تغییر ip نیست.
فقط زمانی که یک winsock تعریف کرده باشیم و در حالت listen باشه فقط یک کلاینت می تونه بهش وصل بشه و هنگام اتصال به بقیه پیغام خطا میده و ناگزیر از استفاده از آرایه هستم مگر اینکه پورت رو عوض کنیم که معقول نیست.
به نظر شما و با توجه به ترافیک اطلاعات وارد به سرور بهتر نیست هر سیستمی در یک برنامه هم قابلیت سرور داشته باشه و هم کلاینت؟
این طوری همه پبغام ها به یک کامپیوتر که سرور باشه فرستاده نمیشه و مشکل عدم پاسخگویی سرور به دلیل حجم بالای اطلاعات پیش نمیاد.
negative60
سه شنبه 16 دی 1393, 02:56 صبح
شما بايد يه سوکت رو فقط برای گوش دادن به يک پورت ايجاد کنيد و کلاينت ها رو با سوکت ديگه Accept کنيد
به اين صورت:
Dim IndexSock As Integer
Private Sub Command2_Click()
Winsock1.LocalPort = 253
Winsock1.Listen
End Sub
Private Sub Form_Load()
Dim I As Integer
For I = 1 To 600
Load Winsock2(I)
Next
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
'age sooket bikar bashe
If Not Winsock2(IndexSock).State = 7 Then
'Accept be vasile soket
Winsock2(IndexSock).Accept requestID
IndexSock = IndexSock + 1
End If
End Sub
shahram_g
سه شنبه 16 دی 1393, 10:53 صبح
با این روش اگه چندین درخواست همزمان برسه مشکل تداخل اطلاعات و احیانا گم شدن داده ها بالا نمیره؟
آیا این روش توانایی پاسخ با پیام حداقل 500 نفری رو داره؟
رم سرور و پهنای باند مشکلی نداره.
negative60
چهارشنبه 17 دی 1393, 01:23 صبح
خيالت راحت اگر کلاينت ها و ديتا ورودی به درستی مديريت بشن مشکلی برای درخواست همزمان و گم شدن ديتا وجود نخواهد داشت با وينساک تا 10 هزار تا سوکت همزمان هم ميتونی داشته باشی اما تعداد کلاينت بستگی به نحوه کار و نوع پياده سازی شما داره
خودت ميتونی يه برنامه تست جدا برای شبيه سازی کلاينت با تعداد بالا بسازی و با همشون همزمان به سرورت کانکت بشی و کارهايی که قرار هست تو شبکه ات انجام بشه رو تست کنی تا به نتيجه مطلوبی برسی.
فانوس1
سه شنبه 30 دی 1393, 13:52 عصر
سلام
این کد ارور میدهد وقتی بخواهیم با winsock2 چیزی را دریافت کنیم یا بفرستیم مثلا
winsock2(indexsock).senddata s
ارور میده که پروتکلش اشتباهه
woring protocol or connection state for the requested tarnsaction or request
اگه برنامه ی اجراشده ای دارید لطفا اگه تونستید تا امشب بگذارید.
ممنون.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.