PDA

View Full Version : مشکل این کد چیه؟



kingtak
یک شنبه 28 آبان 1391, 17:57 عصر
95175


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Net;
using System.Net.NetworkInformation;
using System.Windows.Threading;
using System.Collections;
using System.Threading;

namespace PingExample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//Timer
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 5);
dispatcherTimer.Start();
}

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
pingSender();

}

public void pingSender()
{
try
{

IPAddress[] ipList = new IPAddress[11];
ipList[0] = IPAddress.Parse("74.125.225.193");
ipList[1] = IPAddress.Parse("74.125.225.192");
ipList[2] = IPAddress.Parse("174.36.84.92");
ipList[3] = IPAddress.Parse("24.246.192.8");
ipList[4] = IPAddress.Parse("69.55.53.89");

ipList[5] = IPAddress.Parse("199.195.128.4");
ipList[6] = IPAddress.Parse("216.245.214.165");
ipList[7] = IPAddress.Parse("176.9.63.137");
ipList[8] = IPAddress.Parse("94.232.174.83");
ipList[9] = IPAddress.Parse("205.234.185.14");
ipList[10] = IPAddress.Parse("199.15.160.100");

foreach (IPAddress address in ipList)
{

Ping pingSender = new Ping();
PingReply replay = pingSender.Send(address);
if (replay.Status == IPStatus.Success)
{
listBox1.Items.Add(replay.Address.ToString() + " Is Online");
switch (replay.Address.ToString())
{
case "74.125.225.193":
image2.Visibility = Visibility.Visible;
break;
case "74.125.225.192":
image4.Visibility = Visibility.Visible;
break;
case "174.36.84.92":
image6.Visibility = Visibility.Visible;
break;
case "24.246.192.8":
image8.Visibility = Visibility.Visible;
break;
case "69.55.53.89":
image10.Visibility = Visibility.Visible;
break;

case "199.195.128.4":
image12.Visibility = Visibility.Visible;
break;
case "216.245.214.165":
image14.Visibility = Visibility.Visible;
break;
case "176.9.63.137":
image16.Visibility = Visibility.Visible;
break;
case "94.232.174.83":
image18.Visibility = Visibility.Visible;
break;
case "205.234.185.14":
image20.Visibility = Visibility.Visible;
break;
case "199.15.160.100":
image22.Visibility = Visibility.Visible;
break;
}
}

else
{
listBox1.Items.Add(replay.Address.ToString() + "is Offline");
switch (replay.Address.ToString())
{
case "74.125.225.193":
image1.Visibility = Visibility.Visible;
break;
case "74.125.225.192":
image3.Visibility = Visibility.Visible;
break;
case "174.36.84.92":
image5.Visibility = Visibility.Visible;
break;
case "24.246.192.8":
image7.Visibility = Visibility.Visible;
break;
case "69.55.53.89":
image9.Visibility = Visibility.Visible;
break;

case "199.195.128.4":
image11.Visibility = Visibility.Visible;
break;
case "216.245.214.165":
image13.Visibility = Visibility.Visible;
break;
case "176.9.63.137:":
image15.Visibility = Visibility.Visible;
break;
case "94.232.174.83":
image17.Visibility = Visibility.Visible;
break;
case "205.234.185.14":
image19.Visibility = Visibility.Visible;
break;
case "199.15.160.100":
image19.Visibility = Visibility.Visible;
break;
}

}
}
}
catch (PingException px)
{
listBox1.Items.Add(px.Message);
}
catch (Exception ex)
{
listBox1.Items.Add(ex.Message);
}

}

public void locationPrint(int x, int y)
{

this.Title = "X: " + x + " ," + "Y: " + y;
}

private void mapCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
Point mouseLocation = e.GetPosition(this.mapCanvas);
locationPrint((int)mouseLocation.X, (int)mouseLocation.Y);
}
}
}

Mahmoud Zaad
یک شنبه 28 آبان 1391, 18:07 عصر
سلام
اول اون try catch رو کامنت کن ببینیم برنامه از کجا می ترکه!!!

morteza271
یک شنبه 28 آبان 1391, 18:19 عصر
فکر کنم مشکلتون از این خط باشه :
string caseSwitch = (string)replay.Address.ToString();
در قسمت else ...

البته به نظرم بهتره دستور switch رو به جای اینکه بر اساس آدرس برگشتی انجام بدین بر اساس مقدار address انجام بدین...
ولی بازم برنامتون رو تریس کنید و ببینید مشکل از کدو خط کدتون هست...

kingtak
یک شنبه 28 آبان 1391, 21:19 عصر
فکر کنم مشکلتون از این خط باشه :
string caseSwitch = (string)replay.Address.ToString();
در قسمت else ...

البته به نظرم بهتره دستور switch رو به جای اینکه بر اساس آدرس برگشتی انجام بدین بر اساس مقدار address انجام بدین...
ولی بازم برنامتون رو تریس کنید و ببینید مشکل از کدو خط کدتون هست...

بله درسته مشکل از همون سوئیچه.
ببخشید منظورتون رو متوجه نشدم "بر اساس مقدار address انجام بدین" ؟؟؟؟؟؟
یه سوال دیگه داشتم؟وقتی برنامه شروع به پینگ کردن می کنه برنامه قفل میشه.قبلا این مشکل رو توی فروم مطرح کردم و دوستان پیشنهاد دادن با چند نخی حلش کنم.چطور می تونم این مشکل رو حل کنم؟
آیا راهی هست که حلقه foreach مثلا هر 30 ثانیه یکی از آی پی هارو پینگ کنه؟تا برنامه هنگ نکنه؟آخه من میخوام تعداد آی پی هارو تا 100 تا زیاد کنم و نمیخوام مشکلی پیش بیاد!!!

morteza271
یک شنبه 28 آبان 1391, 21:32 عصر
ببخشید منظورتون رو متوجه نشدم "بر اساس مقدار address انجام بدین" ؟؟؟؟؟؟
به کد خودتون دقت کنید :
foreach (IPAddress address in ipList)
منظورم این آدرس بود، یعنی به صورت زیر باشه :
switch (address)
{
case "204.79.128.0":
image2.Visibility = Visibility.Visible;
break;
.
.
.
البته این فقط یه نظر بود!!!

در مورد اینکه برنامتون هنگ میکنه دوستان درست راهنمایی تون کردن چراکه راهش همینه و باید از ترد ها یا backgroundWorker ها استقاده کرد.
طریقه ی استفاده از این دو مورد توی همین سایت زیاد نمونه برنامه هست.

در مورد اینکه هر 30 ثانیه یکی رو چک کنه هم میتونید به صورت زیر عمل کنید :
یه متغیر سراسری تعریف کنید که اندیس آدرسی رو نگه داره که چک شده.
بعد در رویداد تیک یه تایمر که هر 30ثانیه اتفاق میفته(مقدار Intervale تایمر 30 ثانیه) یکی به اون متغیر سراسری اضافه کنید و عملیات موردنظرتون رو با اون آدرس انجام بدین.
چک کردن اینکه به آخر لیست آدرسها رسیدین هم یادتون نره...

موفق باشید

kingtak
دوشنبه 29 آبان 1391, 22:37 عصر
به کد خودتون دقت کنید :
foreach (IPAddress address in ipList)
منظورم این آدرس بود، یعنی به صورت زیر باشه :
switch (address)
{
case "204.79.128.0":
image2.Visibility = Visibility.Visible;
break;
.
.
.
البته این فقط یه نظر بود!!!

در مورد اینکه برنامتون هنگ میکنه دوستان درست راهنمایی تون کردن چراکه راهش همینه و باید از ترد ها یا backgroundWorker ها استقاده کرد.
طریقه ی استفاده از این دو مورد توی همین سایت زیاد نمونه برنامه هست.

در مورد اینکه هر 30 ثانیه یکی رو چک کنه هم میتونید به صورت زیر عمل کنید :
یه متغیر سراسری تعریف کنید که اندیس آدرسی رو نگه داره که چک شده.
بعد در رویداد تیک یه تایمر که هر 30ثانیه اتفاق میفته(مقدار Intervale تایمر 30 ثانیه) یکی به اون متغیر سراسری اضافه کنید و عملیات موردنظرتون رو با اون آدرس انجام بدین.
چک کردن اینکه به آخر لیست آدرسها رسیدین هم یادتون نره...

موفق باشید


آخه address از نوع IPAddressهستش و دستور سوئیچ قبولش نمی کنه.
آخرش من متوجه نشدم این اررور واسه چیه.خوب من که آدرس آی پی رو به استرینگ تبدیل میکنم؟؟؟؟؟؟؟؟
به نظرتون کلا این الگوریتم از لحاظ منطقی درسته؟

حسین شهریاری
سه شنبه 30 آبان 1391, 07:03 صبح
این خطا زمانی صادر میشه که شما شما از یه کلاس یه نمونه میگیرید و قبل از new کردنش از اون استفاده میکنید.
مثلا:

DataSet ds;
حالا اگه قبل از اینکه new بشه ازش استفاده کنی:

ds.Clear();
همان خطا صادر خواهد شد.

kingtak
سه شنبه 30 آبان 1391, 10:59 صبح
این خطا زمانی صادر میشه که شما شما از یه کلاس یه نمونه میگیرید و قبل از new کردنش از اون استفاده میکنید.
مثلا:

DataSet ds;
حالا اگه قبل از اینکه new بشه ازش استفاده کنی:

ds.Clear();
همان خطا صادر خواهد شد.


خوب من که همچین کاری نکردم ؟پس چرا این خطا رو میده؟

kingtak
چهارشنبه 01 آذر 1391, 19:35 عصر
95366

من یک لیست باکس گزاشتم تا پینگ هامو ببینم.ولی متوجه شدم همیشه این خطا داده نمیشه.فقط بعضی وقتها....
همونطور که توی عکس می بینید!
من توی کد ام یه شرط گذاشتم که اگه پینگ موفقیت آمیز بود این کار هارو بکن وگرنه....فلان کار هارو.
خوب چرا اون وقتایی که موفقیت آمیز نبود دستور else رو اجرا نمی کنه؟(میره سرغ catche)
به نظرتون منبع اصلی این خطا چیه؟

kingtak
پنج شنبه 02 آذر 1391, 10:56 صبح
دوستان نظری ندارن؟
چرا دستور else اجرا نمیشه؟

kingtak
سه شنبه 10 بهمن 1391, 00:54 صبح
کسی نمیدونه چرا شرط برنامه درست کار نمیکنه؟

RED-C0DE
سه شنبه 10 بهمن 1391, 02:04 صبح
برنامه رو تست نکردم ولی احتمال زیاد تو این 2 خط مشکل دارین:

PingReply replay = pingSender.Send(address);
if (replay.Status == IPStatus.Success)



متود Send روی بعضی آدرسها باعث بروز استثنا می شه و خروجی null بر میگردونه و توی reply، شما null می گیرین. حالا وقتی ک در خط بعد می خواین reply.Status رو چک کنید چون reply خودش null هست باعث اون exception می شه

می تونین بعد از اینکه reply رو دریافت کردید ، مقدار اون رو با null مقایسه کنید و هرجور صلاح می دونین هندل کتید کار رو