PDA

View Full Version : سوال: قرار دادن شرط روی این کد در صورت موفقیت ...



Mosafers
یک شنبه 08 بهمن 1391, 22:59 عصر
سلام به تمامی اساتید عزیز....

چطور میتونم یه شرط روی کد زیر بذارم در صورت ping موفق ok بده؟


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Process proc = new Process();

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/c ping 5.119.195.124";
proc.Start();

string output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
MessageBox.Show(output);
}
}
}

ordebehesht
یک شنبه 08 بهمن 1391, 23:10 عصر
من از شبکه سر درنمی اروم در واقع برنامه نویسیشو نمیدونم آما هنگام ping پکت میره و بر میگرده یه جواب که بله وصله خوی یه پکت بفرست و جواب بگیر اگه اومد اوکی کن

danialafshari
یک شنبه 08 بهمن 1391, 23:11 عصر
برای من که این کد کار کرد:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Process proc = new Process();

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/c ping 127.0.0.1";
proc.Start();

string output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();

MessageBox.Show(output);

if (output.Length == 46)
{
MessageBox.Show("Not Connect");
}
else
{
MessageBox.Show("Connected");
}
}
}
}

Mosafers
یک شنبه 08 بهمن 1391, 23:18 عصر
بله یه درخواست (بسته) میفرسته و بسته بازگشت دریافت میکنه ولی همونطور که میبینید واسط این کار داس است که نمیشه شرط منطقی رو برقرار کرد... از روش کلاس using system.net.informationnetwork; میشه که برای این تست مناسب کار من نیست....
کد شما هم روی سیستم من کار نداد در صورت قطع بودن خطای دیگه ای میده...

میتونم روی رشته خروجی جستجو داشته باشم ؟

RED-C0DE
یک شنبه 08 بهمن 1391, 23:31 عصر
سلام به تمامی اساتید عزیز....

چطور میتونم یه شرط روی کد زیر بذارم در صورت ping موفق ok بده؟


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Process proc = new Process();

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/c ping 5.119.195.124";
proc.Start();

string output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
MessageBox.Show(output);
}
}
}


اول بگین دلیلش چیه ک از امکانات خود .net در شبکه برای این منظور استفاده نمی کنید؟ از Ping , PingReply , ...
صورت مسئلتون چیه ک از روش اصولیش نمی تونین برین؟

Mosafers
یک شنبه 08 بهمن 1391, 23:34 عصر
سلام آقای red-code متاسفانه مشتری گیر داده خروجی فقط باید به این شکل باشه... :ناراحت:

اینم پروژه اولمه خیلی وقته وقتمو گرفته :افسرده:

خواهش میکنم یه روشی قرار بدید؟ از سرچ میشه؟


Reply from 85.15.1.10 bytes= 32 Time= 2ms TTL= 55 Reply from 85.15.1.10 bytes= 32 Time= 2ms TTL= 55 Reply from 85.15.1.10 bytes= 32 Time= 1ms TTL= 55 Reply from 85.15.1.10 bytes= 32 Time= 2ms TTL= 55 Reply from 85.15.1.10 bytes= 32 Time= 2ms TTL= 55

RED-C0DE
دوشنبه 09 بهمن 1391, 00:13 صبح
تو این مورد ، پردازش string می تونین استفاده کنین تقریبا مثل همین ک دوستان بهش اشاره کردن. ک البته باید تمام حالات رو در نظر بگیرید. یا فقط حالت "درست بودن" رو بتونین با پردازش رشته ای بدست بیارید و باقی حالات می شن نادرست.
ک البته دردسرای خودش رو شاید داشته باشه ولی این کارتون رو راه میندازه

یا اگه مشتری شما "ظاهر شبیه کنسول" مد نظرشه ، اون ظاهر رو براش بسازین ولی پشت پرده کار خودتون رو بکنین

RED-C0DE
دوشنبه 09 بهمن 1391, 00:22 صبح
مثلا ی حابت ساده برای وقتی ک بخواین با پردازش رشته ای نتیجه رو تحلیل کنید :

private void doPing()
{
Process proc = new Process();

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/c ping google.com";
proc.Start();

string output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();


if (isPingReplyOK(output))
{
// ok
}
else
{
// nok
}

}

private bool isPingReplyOK(string pPingReplyString)
{
return pPingReplyString.Contains("Reply from");
}


ک بسته ب اینکه حالتی رو بعنوان OK در نظر می گیرید باید تابع دوم رو تغییر بدید.
حالتهای مختلفی هم هست مثل time out , host not reachable , host not found , ...

ک البته اصلا روش درستی نیست این کارا

Mosafers
دوشنبه 09 بهمن 1391, 09:59 صبح
مثلا ی حابت ساده برای وقتی ک بخواین با پردازش رشته ای نتیجه رو تحلیل کنید :

private void doPing()
{
Process proc = new Process();

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/c ping google.com";
proc.Start();

string output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();


if (isPingReplyOK(output))
{
// ok
}
else
{
// nok
}

}

private bool isPingReplyOK(string pPingReplyString)
{
return pPingReplyString.Contains("Reply from");
}


ک بسته ب اینکه حالتی رو بعنوان OK در نظر می گیرید باید تابع دوم رو تغییر بدید.
حالتهای مختلفی هم هست مثل time out , host not reachable , host not found , ...

ک البته اصلا روش درستی نیست این کارا

سلام واقعا از کد نویستون خوشم میاد پست هاتون رو دنبال کردم... nok اسمبلی !

ببخشید یه سوال دیگه دارم من باید با زدن یک دکمه 4 تا ping روانجام بدم و در صورت درست بودن پیغام موفقیت بده و باید در صورت موفقیت مقداری به progressbar افزوده بشه تا اینجاش مشکلی نیست...

مشکلم اینجاست که در صورت نا موفق بودن هر مرحله توقف کنه و کاربر بتونه دکمه رو دوباره بزنه از همون نقطه توقف شروع کنه ؟

میشهراهنماییم کنید از چه روشی استفاده کنم...