PDA

View Full Version : پیاده سازی کلاینت سرور



yavari
جمعه 10 فروردین 1386, 12:21 عصر
سلام

من میخوام وقتی چند تا کلاینت به برنامه سرورم متصل میشن و مثلا مسج میفرستن قاط نزنه برنامم اینجوری !!! :عصبانی++:
یه مشکل دیگه اینکه ، همونجوری که تصویر هم نشون میده مسج رو سرور درست نمیاد :افسرده: ، چرا ؟

ممنون میشم یکی بگه چجوری مشکلم حل میشه !

hmm
شنبه 11 فروردین 1386, 00:44 صبح
لطفا در مورد برنامه و عملی که برنامه انجام میده و چگونگی رخداد این پیغام بیشتر توضیح بدید
منظورتون از مسیج چیه ؟

CodeMasterX
شنبه 11 فروردین 1386, 12:49 عصر
برنامه ای که نوشتم رو ببین:

http://barnamenevis.org/forum/showpost.php?p=319888&postcount=2

manager
شنبه 11 فروردین 1386, 12:59 عصر
از SocketProgramming استفاده می کنی یا DotNet Remoting ?
برای اینکه منابع مشترکت در آن واحد مورد استفاده چند درخواست کننده قرار نگیره باید از ReaderWriterLock استفاده کنی. بیشتر توضیح بده ..

CodeMasterX
شنبه 11 فروردین 1386, 13:08 عصر
این برنامه ای من قبلا گذاشته بودم SocketProgramming هست.برای اینکه چند کاربر بتونن ازش استفاده کنن یه راه حل خیلی ساده و ابتدایی اینه که کنترل Winsock رو بصورت یک آرایه در بیاریم.یعنی اینکه اندیسش رو برابر با صفر قرار بدیم و هر بار که یه ConnectionRequest بهش میرسه با ReDim Preserve یه مدل جدید ازش ساخته شه و دستورات اجرایی مون رو هم می تونیم با اندیس ها کنترل کنیم.برای اینکه اختلالی هم به وجود نیاد بله میشه از قفل ها استفاده کرد و ترجیحا اگر برای برنامه نویس ملال آور! نباشه پیشنهاد می کنم از MultiThreading استفاده کنه که دیگه عالی میشه.

manager
شنبه 11 فروردین 1386, 13:12 عصر
از SocketProgramming استفاده می کنی یا DotNet Remoting ?
برای اینکه منابع مشترکت در آن واحد مورد استفاده چند درخواست کننده قرار نگیره باید از ReaderWriterLock استفاده کنی. بیشتر توضیح بده ..سوء تفاهم شد بنده با خانم/آقای یاوری بودم ....


برای اینکه اختلالی هم به وجود نیاد بله میشه از قفل ها استفاده کرد و ترجیحا اگر برای برنامه نویس ملال آور! نباشه پیشنهاد می کنم از MultiThreading استفاده کنه که دیگه عالی میشه.برای منابعی که باید بین Threadها share باشند بهتره از همون قفل استفاده کرد.

CodeMasterX
شنبه 11 فروردین 1386, 13:19 عصر
آهان من فکر کردم شما با منی :لبخند:.
آره خوب همون قفل ها کافیه،ولی این برنامه من فقط یه مثال کوچولو هست.برای برنامه های اداری مثلا خیلی میشه توسعه اش داد و اون موقع که سنگین شد بعضی جاها MultiThreading خیلی کمک می کنه.اگه توی این بخش دربارش بحث نشده تا کد هاش رو بذارم ؟

yavari
شنبه 11 فروردین 1386, 16:21 عصر
این برنامه ای من قبلا گذاشته بودم SocketProgramming هست.برای اینکه چند کاربر بتونن ازش استفاده کنن یه راه حل خیلی ساده و ابتدایی اینه که کنترل Winsock رو بصورت یک آرایه در بیاریم.یعنی اینکه اندیسش رو برابر با صفر قرار بدیم و هر بار که یه ConnectionRequest بهش میرسه با ReDim Preserve یه مدل جدید ازش ساخته شه و دستورات اجرایی مون رو هم می تونیم با اندیس ها کنترل کنیم.برای اینکه اختلالی هم به وجود نیاد بله میشه از قفل ها استفاده کرد و ترجیحا اگر برای برنامه نویس ملال آور! نباشه پیشنهاد می کنم از MultiThreading استفاده کنه که دیگه عالی میشه.


سلام
ممنون ، برنامه قشنگی بود !
اما دقیقا مشکل برنامه منو داره ، یعنی همون اروری که تصویر نشون میده
این فکرم به ذهنم رسید اما هنوز ازش جواب نگرفتم !

Private Sub sckServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 3 ' Val(sckServer(intMax - 1).LocalPort) + 1
Load txtData(intMax)
txtData(intMax).Top = txtData(intMax - 1).Top + 1000
txtData(intMax).Visible = True
Else
End If
End Sub
در ضمن از این قفله "ReaderWriterLock " چجوری میشه استفاده کرد ؟؟؟
ممنون از همگی:تشویق:

yavari
یک شنبه 12 فروردین 1386, 08:20 صبح
سلام

کسی راهی نداره ؟؟؟

yavari
یک شنبه 12 فروردین 1386, 08:59 صبح
از SocketProgramming استفاده می کنی یا DotNet Remoting ?
برای اینکه منابع مشترکت در آن واحد مورد استفاده چند درخواست کننده قرار نگیره باید از ReaderWriterLock استفاده کنی. بیشتر توضیح بده ..


سلام

از SocketProgramming استفاده می کنم !
توضیح خاصی ندارم ! دقیقا برنامه ای دارم شبیه دوستمون CodeMasterX فقط میخوام چند تا کلاینت بتونن با هم به سرورم مسج بدن ، یه چیزی تو مایه های کنفرانس در یاهو مسنجر !
ممنون میشم راجع به اون قفله و MultiThreading بیشتر توضیح بدید !

با تشکر

manager
یک شنبه 12 فروردین 1386, 14:45 عصر
یک مثال نمونه برای شما آماده کردم. این مثال ساده یک Server و یک Client رو برای شما می سازه و با استفاده از Threading به اضای هر اتصال از سمت کلاینت بک Thread ایجاد می کنه.



namespace Farahy.Net
{
class TcpServer
{
private TcpListener _tcpListener;


public TcpServer(int port)
{
_tcpListener = new TcpListener(port);
}

public void BeginToListen(int intMaxconn)
{
_tcpListener.Start(intMaxconn);

while (true)
{
if (!_tcpListener.Pending())
{
Console.WriteLine("Waiting for new request...");
Thread.Sleep(1000);
}
else
{
Console.WriteLine("Recieve new pending..");
ClientConnectionThread clientConn = new ClientConnectionThread(_tcpListener);
Thread thread = new Thread(new ThreadStart(clientConn.HandleConnection));
thread.Start();
}
}
}
}

}



اگر به توضیحی نیاز داشتید در خدمتتون هستم.(ببخشید یکم عجله ای شد)

دانلود (http://mfarahy.persiangig.com/Training/examples/Socket.rar)

yavari
یک شنبه 12 فروردین 1386, 23:21 عصر
سلام

ممنون از همگی ! :تشویق:
اما تا اونجائی که من فهمیدم تو وی بی 6 امکانات شی گرائی که دات نت ارائه میکنه وجود نداره و اگه اشتباه نکنم تنها راهش همون لود کردن آرایه ای باشه !!! :متفکر:

با تشکر ویژه از جناب آقای فراحی و CodeMasterX :تشویق: :تشویق:

CodeMasterX
دوشنبه 13 فروردین 1386, 02:23 صبح
خواهش می کنم قابلی نداشت.
ببین دوست عزیز توی وی بی 6 همون ایجاد آرایه ها جواب میده،اون Multithreading هم که گفتم شاید لازم نشه ولی گفتم تا کار برنامه حرفه ای تر مدیریت بشه.
Multithreading یا چند ریسمانی کاری هست که خود ویندوز هم ازش استفاده می کنه.ببینید،شما هر پروسه ای رو که اجرا کنید ویندوز براش یک Thread جدید در نظر می گیره.شما فکر کن تو یه برنامه دو تا ListBox داشته باشی و دو تا دکمه.دکمه اول رو که می زنی 10،000 آیتم به لیست اول اضافه می کنه و دکمه دوم هم همین کار رو برای لیست دوم انجام می ده.حالا اگر بدون چند ریسمانی این برنامه رو اجرا کنی،وقتی دکمه اول رو میزنی برنامه هنگ می کنه و تا پایان کارش باید صبر کنید تا بتونید کلید دوم رو بزنید.چند ریسمانی این مشکل رو حل می کنه.تو سایت دربارش بحث شده،اگر چیزی پیدا نکردید همین جا بگید تا براتون چند تا مثال بذارم.

ealireza
یک شنبه 01 مهر 1386, 18:34 عصر
آقای منیجر من یک کد مانند مال شما نوشتم
اما پکت هام بیشتر از 1024 بیت هست
مثلا پکتی به حجم 20 مگ دارم ...
چطوری بصورت داینامیک طول آرایه رو تنظیم کنم ؟؟؟؟؟؟؟؟

یک کلاس نوشتم با poll رو بعضی از پکت ها حجم رو ناقض تشخیص میده

راه حل چیست ؟؟؟