PDA

View Full Version : ارسال متوالی از طریق یک پورت کامپیوتر



relax_cp
یک شنبه 15 اسفند 1389, 08:40 صبح
با سلام به همگی عزیزان
من دنبال کدی هستم که بتونم توسط اون یک سرور و یک کلاینت درست کنم به صورتی که بعد از اجرای برنامه سرور و باز کردن یک پورت و یک آی پی از سیستم برنامه های کلاینت بتونن تا زمانی که برنامه اجرا هست به اون پورت و اون آی پی تکست ارسال کنند و مشکلی پیش نیاد.
توی این سایت شاید بالای 10 یا 15 صفحه باز کردم ولی همگی اونها یک مشکلی داشت و اونم این بود که بعد از ارسال متن اول از طریق کلاینت و پذیرش اون از طریق سرور ، سرور دیگه هیچ متنی رو از روی پورت گوش نمیداد و نمیتونست ورودی ها رو بگیره.

اگه کسی میتونه یک کد تست شده بذاره یا اینکه همین کد رو مرتب کنید.
بدلیل عدم آپلود فایل ضمیمه توسط سایت من لینک مستقیم رو میگذارم :
http://up.iranblog.com/images/jkyd77hnw9en17x3jazb.rar
این لینک مستقیم برای دانلود نمونه برنامه هست. برنامه احتیاج به ارسال فقط از سمت کلاینت داره همین و بس
ممنون

Reza_Yarahmadi
یک شنبه 15 اسفند 1389, 10:02 صبح
من نفهمیدم مشکل شما کجاست و اصلا مشکل چی هست!! :گیج:
توی سایت انواع و اقسام برنامه چت گذاشته شده ، اکثر اونها کاری که شما میخواید رو انجام میدن (ارسال مداوم اطلاعات از کلاینت به سرور) ، به نمونه زیر یه نگاه بندازید.
http://barnamenevis.org/forum/showthread.php?t=260525

relax_cp
یک شنبه 15 اسفند 1389, 10:50 صبح
ممنون این رو هم دیدم و دانلود کردم ولی مشکلم اینه که برنامه شما اجرا نمیشه روی سیستم.
الان توی همین کدی که گذاشتم میخوام این کار انجام بشه که برنامه کلاینت بتونه مرتب ارسال دیتا داشته باشه بصورت دستی و برنامه سرور هم دیتا رو بگیره و توی یک ریچ تکست باکس نشونشون بده. هیچ پیامی یا متنی هم نمیخوام که سرور به کلاینت ارسال کنه . این برنامه ای که گذاشتم یک بار این کار رو انجام میده ولی در دفعات بعدی سرور دیگه چیزی رو دریافت نمیکنه عزیزم مشکل همینجاست که فقط یک بار دیتا میگیره بعد دیگه نمیگیره.
اگه لینکی دارید و نمیشه اینجا گذاشت لطف کنید برام نامه خصوصی بزنید واقعا شدید درگیرشم.

Reza_Yarahmadi
یک شنبه 15 اسفند 1389, 13:19 عصر
ممنون این رو هم دیدم و دانلود کردم ولی مشکلم اینه که برنامه شما اجرا نمیشه روی سیستم.
یعنی چی اجرا نمیشه؟ خطا میده؟ باگ داره؟ کار نمیکنه؟ برای کار با برنامه ابتدا برنامه سرور و بعد برنامه کلاینت رو اجرا کنید. در برنامه کلاینت روی Set Server کلیک کنید و IP کامپیوتری که برنامه سرور روی اون اجرا شده رو بدید (در صورتی که برنامه سرور هم روی سیستم خودتون اجرا شده IP رو 127.0.0.1 بدید). بعد از این کار روی Sign Up کلیک کنید و یک یوزر اضافه کنید. الان دیگه میتونید از برنامه استفاده کنید.
شما کدهای دریافت اطلاعات در سرور رو باید توی یک حلقه بینهایت قرار بدید. برنامه سرور خودتون رو به 2 روش اصلاح کردم یه نگاه بهش بندازید.
private void AcceptCallback(IAsyncResult ar)
{
Socket temp = ((Socket)ar.AsyncState);
Socket worker = temp.EndAccept(ar);
while (true)
{
try
{
int bytesReceived = worker.Receive(buffer);
string str = System.Text.UTF8Encoding.UTF8.GetString(buffer, 0, bytesReceived);
richTextBox1.Text += str + "\n";
}
catch { break; }
}
//AsyncCallback ReceiveMethod = new AsyncCallback(ReceiveCallBack);
//worker.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMethod), worker);
}

private void ReceiveCallBack(IAsyncResult ar)
{
try
{
Socket worker = ((Socket)ar.AsyncState);
int bytesReceived = worker.EndReceive(ar);
AsyncCallback ReceiveMethod = new AsyncCallback(ReceiveCallBack);
worker.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMethod), worker);
string str = System.Text.UTF8Encoding.UTF8.GetString(buffer, 0, bytesReceived);
richTextBox1.Text += str + "\n";
}
catch { }
}

relax_cp
شنبه 21 اسفند 1389, 09:58 صبح
واقعا ازت ممنون رفیق
فعلا مشکلم حل شد مشکلی که یک هفته درگیرش بودم
با این اصلاحیه درست میشه. البته من این رو چک کردم و درست بود:
private void AcceptCallback(IAsyncResult ar)
{
Socket temp = ((Socket)ar.AsyncState);
Socket worker = temp.EndAccept(ar);
// while (true)
// {
// try
// {
// int bytesReceived = worker.Receive(buffer);
// string str = System.Text.UTF8Encoding.UTF8.GetString(buffer, 0, bytesReceived);
// richTextBox1.Text += str + "\n";
// }
// catch { break; }
// }
AsyncCallback ReceiveMethod = new AsyncCallback(ReceiveCallBack);
worker.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMethod), worker);
}

private void ReceiveCallBack(IAsyncResult ar)
{
try
{
Socket worker = ((Socket)ar.AsyncState);
int bytesReceived = worker.EndReceive(ar);
AsyncCallback ReceiveMethod = new AsyncCallback(ReceiveCallBack);
worker.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMethod), worker);
string str = System.Text.UTF8Encoding.UTF8.GetString(buffer, 0, bytesReceived);
MessageBox.Show(str);
}
catch { }
}