PDA

View Full Version : listen کردن مجدد سرور بعد از قطع ارتباط



Payman62
یک شنبه 02 دی 1386, 12:54 عصر
سلام.
من یه برنامه کلاینت سروری با روش Asynchronous نوشتم.
ولی یه مشکلی دارم. اگه ارتباط کلاینت سرور رو قطع کنم یعنی دیسکانکت کنم بعد بخوام از طریق سرور مجدد رو همون پورت لیسن کنم ارور میده و میگه فقط 1 بار میشه از یه آدرس استفاده کرد.
من متغیرم رو بعد از قطع ارتباط close هم میکنم و یه متغیر جدید هم new میکنم و میسازم. ولی باز همون ارور رو میده.
تنها راهش اینه که سرور رو یه بار ببندم و دوباره اجرا کنم تا بتونم دوباره لیسن کنم.
لطفا راهنمایی کنید چطور بعد از قطع ارتباط بتونم مجددا رو همون پورت لیسن کنم.

hassan razavi
یک شنبه 02 دی 1386, 13:08 عصر
استفاده از using یا Dispose در هنگام ختم تماس را هم امتحان کنید.

Payman62
یک شنبه 02 دی 1386, 23:18 عصر
سلام.
میشه بیشتر توضیح بدی. در این زمینه اطلاعات ندارم.

ARA
سه شنبه 04 دی 1386, 09:45 صبح
دستور shutdown رو هم امتحان کن

Payman62
سه شنبه 04 دی 1386, 11:29 صبح
سلام.
جواب نداد. لطفا راهنمایی کنید. سوال ساده ایه که.

Payman62
سه شنبه 04 دی 1386, 14:43 عصر
سلام.
اصلا کلاس سوکت dispose نداره. شات دان هم کارمو راه ننداخت.

ARA
سه شنبه 04 دی 1386, 15:12 عصر
سلام من با کلاینت سرور زیاد سرو کله زدم

اگه یک sample کوچک بگذاری اینجا کاملتر میتونم کمکت کنم

چون وقت نمیکنم از اول خودم کد بنویسم تا چک کنم

Payman62
چهارشنبه 05 دی 1386, 11:48 صبح
سلام.
اینم مثال.

byte[] buffer = new byte[1024];

public Form1()
{
InitializeComponent();

Socket Mainlistener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);

IPEndPoint server = new IPEndPoint(IPAddress.Any, 1800);
Mainlistener.Bind(server);

AsyncCallback callBackMethod = new AsyncCallback(AcceptCallback);

Mainlistener.Listen(4);
Mainlistener.BeginAccept(AcceptCallback,Mainlisten er);
}

private void AcceptCallback(IAsyncResult ar)
{
Socket temp = ((Socket)ar.AsyncState);
Socket worker = temp.EndAccept(ar);
AsyncCallback ReceiveMethod = new AsyncCallback(ReceiveCallBack);
worker.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveMethod, worker);
}

private void ReceiveCallBack(IAsyncResult ar)
{
Socket worker = ((Socket)ar.AsyncState);
int bytesReceived = worker.EndReceive(ar);

string str = System.Text.UTF8Encoding.UTF8.GetString(buffer);
ShowInfo(str);
AsyncCallback ReceiveMethod = new AsyncCallback(ReceiveCallBack);
worker.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveMethod, worker);
}

delegate void ShowInfoCallback(string text);
private void ShowInfo(string text)
{
if (this.txtMain.InvokeRequired)
{
ShowInfoCallback d = new ShowInfoCallback(ShowInfo);
this.Invoke(d, new object[] { text });
}
else
{
txtMain.Text+=text+"\n";

}

}

Payman62
چهارشنبه 05 دی 1386, 21:42 عصر
چی شد پس؟؟؟؟

Payman62
پنج شنبه 06 دی 1386, 20:12 عصر
کمک کنید....

Payman62
دوشنبه 10 دی 1386, 18:16 عصر
سلام.
من هنوز گیرم.

ARA
شنبه 22 دی 1386, 10:58 صبح
سلام شرمنده نتونستم برنامه کامل براتون بگذارم ولی برنامه شما رو نگاه کردم

یک نکته تو close کردن سوکت سرور دیدم که اگه میتونین چک کنین خوبه

هر کلاینتی که به سرور وصل میشه و هر یک شی سکوت مختلف با اونی که منتظر کانکت هست تولید میکنه چون اون باید تمام ارتباط با کلاینت ها رو نگه داره




منظورم اینه که وقتی کلاینت به سرور وصل میشه در متد onAccept سرور سوکتی که بعد از endAccept بدست میاد رو معمولا در یک لیست ذخیره میکنند تا برای قطع کردن کانکشتن بدونی که کدوم از کلاینت ها بصورت connected هستند یا نه

اگه تو کد خودتون نگاه کنین میبینین که اگر در موقع shutdown کردن نگاهش کنی connectedآن falseبوده

Payman62
شنبه 22 دی 1386, 21:15 عصر
سلام.
خوب راه حل چیه؟ من مقدار endaccept رو تو یه متغیر جدید هم ریختم ولی جواب نداد.

razavi_university
دوشنبه 24 دی 1386, 01:08 صبح
من قبلا یه برنامه واسه چت با سوکت نوشتم که مشکل قطع و وصل مجدد رو نداشت
کارت رو راه میندازه
فایل های ضمیمه http://barnamenevis.org/forum/images/attach/rar.gif Socket.rar (http://barnamenevis.org/forum/attachment.php?attachmentid=13409&d=1199309889) (527.7 کیلوبایت, 55 دیدار)

ARA
دوشنبه 24 دی 1386, 14:08 عصر
سلام رضوی عزیز
تو برنامه شما هم یک مشکل کوچک مثل همون که برای دوستمون گفتم نیز هست

مگه فقط یک کلاینت دارین ؟؟

فکر کنم دوستمون داخل کدشون میخواهند disconnect بشن
شما صورت مسئله رو پاک کردین

razavi_university
سه شنبه 25 دی 1386, 00:46 صبح
خب نگفتی با چندتا کلاینت می‌خوای:اشتباه:
این هم با چند تا کلاینت:بوس:

ARA
سه شنبه 25 دی 1386, 14:13 عصر
حالا میرسیم به مرحله بعد که async کار کنین p;

razavi_university
پنج شنبه 27 دی 1386, 12:39 عصر
دیگه اینجاشو فعلا شرمندم تا بعد امتحانا
فعلا هم که انداختند عقب
تازه امتحان ارشد هم هست:اشتباه:
مشکل دیگه اینکه من با اون روش کار نکردم تازه باید برم بخونم ;)